home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / gnumans.zip / gcc.inf (.txt) < prev    next >
OS/2 Help File  |  1997-07-02  |  737KB  |  23,688 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Title page ΓòÉΓòÉΓòÉ
  3.  
  4.                             Using and Porting GNU CC
  5.  
  6.                                Richard M. Stallman
  7.  
  8.                             Last updated 29 June 1996
  9.  
  10.                                for version 2.7.2.1
  11.  
  12. Copyright (C) 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc. 
  13.  
  14. For GCC Version 2.7.2 
  15.  
  16. Published by the Free Software Foundation 
  17. 59 Temple Place - Suite 330 
  18. Boston, MA 02111-1307, USA 
  19. Last printed November, 1995. 
  20. Printed copies are available for $50 each. 
  21. ISBN 1-882114-66-3 
  22.  
  23. Permission is granted to make and distribute verbatim copies of this manual 
  24. provided the copyright notice and this permission notice are preserved on all 
  25. copies. 
  26.  
  27. Permission is granted to copy and distribute modified versions of this manual 
  28. under the conditions for verbatim copying, provided also that the sections 
  29. entitled ``GNU General Public License,'' ``Funding for Free Software,'' and 
  30. ``Protect Your Freedom---Fight `Look And Feel''' are included exactly as in the 
  31. original, and provided that the entire resulting derived work is distributed 
  32. under the terms of a permission notice identical to this one. 
  33.  
  34. Permission is granted to copy and distribute translations of this manual into 
  35. another language, under the above conditions for modified versions, except that 
  36. the sections entitled ``GNU General Public License,'' ``Funding for Free 
  37. Software,'' and ``Protect Your Freedom---Fight `Look And Feel''', and this 
  38. permission notice, may be included in translations approved by the Free 
  39. Software Foundation instead of in the original English. 
  40.  
  41.  
  42. ΓòÉΓòÉΓòÉ 2. Top node: "Introduction" ΓòÉΓòÉΓòÉ
  43.  
  44. This manual documents how to run, install and port the GNU compiler, as well as 
  45. its new features and incompatibilities, and how to report bugs.  It corresponds 
  46. to GNU CC version 2.7.2. 
  47.  
  48.  Copying                                 GNU General Public License says 
  49.             how you can copy and share GNU CC. 
  50.  
  51.  Contributors                            People who have contributed to GNU CC. 
  52.  Funding                                 How to help assure funding for free 
  53.                                          software. 
  54.  Look and Feel                           Protect your freedom---fight ``look 
  55.                                          and feel''. 
  56.  
  57.  G++ and GCC                             You can compile C or C++ programs. 
  58.  Invoking GCC                            Command options supported by gcc. 
  59.  Installation                            How to configure, compile and install 
  60.                                          GNU CC. 
  61.  C Extensions                            GNU extensions to the C language 
  62.                                          family. 
  63.  C++ Extensions                          GNU extensions to the C++ language. 
  64.  Trouble                                 If you have trouble installing GNU CC. 
  65.  Bugs                                    How, why and where to report bugs. 
  66.  Service                                 How to find suppliers of support for 
  67.                                          GNU CC. 
  68.  VMS                                     Using GNU CC on VMS. 
  69.  
  70.  Portability                             Goals of GNU CC's portability 
  71.                                          features. 
  72.  Interface                               Function-call interface of GNU CC 
  73.                                          output. 
  74.  Passes                                  Order of passes, what they do, and 
  75.                                          what each file is for. 
  76.  RTL                                     The intermediate representation that 
  77.                                          most passes work on. 
  78.  Machine Desc                            How to write machine description 
  79.                                          instruction patterns. 
  80.  Target Macros                           How to write the machine description C 
  81.                                          macros. 
  82.  Config                                  Writing the xm-machine.h file. 
  83.  Fragments                               Writing the t-target and x-host files. 
  84.  
  85.  Index                                   Index of concepts and symbol names. 
  86.  
  87.  
  88. ΓòÉΓòÉΓòÉ 3. GNU GENERAL PUBLIC LICENSE ΓòÉΓòÉΓòÉ
  89.  
  90.                               Version 2, June 1991
  91.  
  92. Copyright (C) 1989, 1991 Free Software Foundation, Inc.
  93. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  94.  
  95. Everyone is permitted to copy and distribute verbatim copies
  96. of this license document, but changing it is not allowed.
  97.  
  98.  
  99. ΓòÉΓòÉΓòÉ 3.1. Preamble ΓòÉΓòÉΓòÉ
  100.  
  101.  The licenses for most software are designed to take away your freedom to share 
  102. and change it.  By contrast, the GNU General Public License is intended to 
  103. guarantee your freedom to share and change free software---to make sure the 
  104. software is free for all its users.  This General Public License applies to 
  105. most of the Free Software Foundation's software and to any other program whose 
  106. authors commit to using it.  (Some other Free Software Foundation software is 
  107. covered by the GNU Library General Public License instead.)  You can apply it 
  108. to your programs, too. 
  109.  
  110.  When we speak of free software, we are referring to freedom, not price.  Our 
  111. General Public Licenses are designed to make sure that you have the freedom to 
  112. distribute copies of free software (and charge for this service if you wish), 
  113. that you receive source code or can get it if you want it, that you can change 
  114. the software or use pieces of it in new free programs; and that you know you 
  115. can do these things. 
  116.  
  117.  To protect your rights, we need to make restrictions that forbid anyone to 
  118. deny you these rights or to ask you to surrender the rights. These restrictions 
  119. translate to certain responsibilities for you if you distribute copies of the 
  120. software, or if you modify it. 
  121.  
  122.  For example, if you distribute copies of such a program, whether gratis or for 
  123. a fee, you must give the recipients all the rights that you have.  You must 
  124. make sure that they, too, receive or can get the source code.  And you must 
  125. show them these terms so they know their rights. 
  126.  
  127.  We protect your rights with two steps: (1) copyright the software, and (2) 
  128. offer you this license which gives you legal permission to copy, distribute 
  129. and/or modify the software. 
  130.  
  131.  Also, for each author's protection and ours, we want to make certain that 
  132. everyone understands that there is no warranty for this free software.  If the 
  133. software is modified by someone else and passed on, we want its recipients to 
  134. know that what they have is not the original, so that any problems introduced 
  135. by others will not reflect on the original authors' reputations. 
  136.  
  137.  Finally, any free program is threatened constantly by software patents.  We 
  138. wish to avoid the danger that redistributors of a free program will 
  139. individually obtain patent licenses, in effect making the program proprietary. 
  140. To prevent this, we have made it clear that any patent must be licensed for 
  141. everyone's free use or not licensed at all. 
  142.  
  143.  The precise terms and conditions for copying, distribution and modification 
  144. follow. 
  145.  
  146.          TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  147.  
  148.    1. This License applies to any program or other work which contains a notice 
  149.       placed by the copyright holder saying it may be distributed under the 
  150.       terms of this General Public License.  The ``Program'', below, refers to 
  151.       any such program or work, and a ``work based on the Program'' means 
  152.       either the Program or any derivative work under copyright law: that is to 
  153.       say, a work containing the Program or a portion of it, either verbatim or 
  154.       with modifications and/or translated into another language. 
  155.       (Hereinafter, translation is included without limitation in the term 
  156.       ``modification''.)  Each licensee is addressed as ``you''. 
  157.  
  158.       Activities other than copying, distribution and modification are not 
  159.       covered by this License; they are outside its scope.  The act of running 
  160.       the Program is not restricted, and the output from the Program is covered 
  161.       only if its contents constitute a work based on the Program (independent 
  162.       of having been made by running the Program). Whether that is true depends 
  163.       on what the Program does. 
  164.  
  165.    2. You may copy and distribute verbatim copies of the Program's source code 
  166.       as you receive it, in any medium, provided that you conspicuously and 
  167.       appropriately publish on each copy an appropriate copyright notice and 
  168.       disclaimer of warranty; keep intact all the notices that refer to this 
  169.       License and to the absence of any warranty; and give any other recipients 
  170.       of the Program a copy of this License along with the Program. 
  171.  
  172.       You may charge a fee for the physical act of transferring a copy, and you 
  173.       may at your option offer warranty protection in exchange for a fee. 
  174.  
  175.    3. You may modify your copy or copies of the Program or any portion of it, 
  176.       thus forming a work based on the Program, and copy and distribute such 
  177.       modifications or work under the terms of Section 1 above, provided that 
  178.       you also meet all of these conditions: 
  179.  
  180.         a. You must cause the modified files to carry prominent notices stating 
  181.            that you changed the files and the date of any change. 
  182.  
  183.         b. You must cause any work that you distribute or publish, that in 
  184.            whole or in part contains or is derived from the Program or any part 
  185.            thereof, to be licensed as a whole at no charge to all third parties 
  186.            under the terms of this License. 
  187.  
  188.         c. If the modified program normally reads commands interactively when 
  189.            run, you must cause it, when started running for such interactive 
  190.            use in the most ordinary way, to print or display an announcement 
  191.            including an appropriate copyright notice and a notice that there is 
  192.            no warranty (or else, saying that you provide a warranty) and that 
  193.            users may redistribute the program under these conditions, and 
  194.            telling the user how to view a copy of this License.  (Exception: if 
  195.            the Program itself is interactive but does not normally print such 
  196.            an announcement, your work based on the Program is not required to 
  197.            print an announcement.) 
  198.  
  199.       These requirements apply to the modified work as a whole.  If 
  200.       identifiable sections of that work are not derived from the Program, and 
  201.       can be reasonably considered independent and separate works in 
  202.       themselves, then this License, and its terms, do not apply to those 
  203.       sections when you distribute them as separate works.  But when you 
  204.       distribute the same sections as part of a whole which is a work based on 
  205.       the Program, the distribution of the whole must be on the terms of this 
  206.       License, whose permissions for other licensees extend to the entire 
  207.       whole, and thus to each and every part regardless of who wrote it. 
  208.  
  209.       Thus, it is not the intent of this section to claim rights or contest 
  210.       your rights to work written entirely by you; rather, the intent is to 
  211.       exercise the right to control the distribution of derivative or 
  212.       collective works based on the Program. 
  213.  
  214.       In addition, mere aggregation of another work not based on the Program 
  215.       with the Program (or with a work based on the Program) on a volume of a 
  216.       storage or distribution medium does not bring the other work under the 
  217.       scope of this License. 
  218.  
  219.    4. You may copy and distribute the Program (or a work based on it, under 
  220.       Section 2) in object code or executable form under the terms of Sections 
  221.       1 and 2 above provided that you also do one of the following: 
  222.  
  223.         a. Accompany it with the complete corresponding machine-readable source 
  224.            code, which must be distributed under the terms of Sections 1 and 2 
  225.            above on a medium customarily used for software interchange; or, 
  226.  
  227.         b. Accompany it with a written offer, valid for at least three years, 
  228.            to give any third party, for a charge no more than your cost of 
  229.            physically performing source distribution, a complete 
  230.            machine-readable copy of the corresponding source code, to be 
  231.            distributed under the terms of Sections 1 and 2 above on a medium 
  232.            customarily used for software interchange; or, 
  233.  
  234.         c. Accompany it with the information you received as to the offer to 
  235.            distribute corresponding source code.  (This alternative is allowed 
  236.            only for noncommercial distribution and only if you received the 
  237.            program in object code or executable form with such an offer, in 
  238.            accord with Subsection b above.) 
  239.  
  240.       The source code for a work means the preferred form of the work for 
  241.       making modifications to it.  For an executable work, complete source code 
  242.       means all the source code for all modules it contains, plus any 
  243.       associated interface definition files, plus the scripts used to control 
  244.       compilation and installation of the executable.  However, as a special 
  245.       exception, the source code distributed need not include anything that is 
  246.       normally distributed (in either source or binary form) with the major 
  247.       components (compiler, kernel, and so on) of the operating system on which 
  248.       the executable runs, unless that component itself accompanies the 
  249.       executable. 
  250.  
  251.       If distribution of executable or object code is made by offering access 
  252.       to copy from a designated place, then offering equivalent access to copy 
  253.       the source code from the same place counts as distribution of the source 
  254.       code, even though third parties are not compelled to copy the source 
  255.       along with the object code. 
  256.  
  257.    5. You may not copy, modify, sublicense, or distribute the Program except as 
  258.       expressly provided under this License.  Any attempt otherwise to copy, 
  259.       modify, sublicense or distribute the Program is void, and will 
  260.       automatically terminate your rights under this License. However, parties 
  261.       who have received copies, or rights, from you under this License will not 
  262.       have their licenses terminated so long as such parties remain in full 
  263.       compliance. 
  264.  
  265.    6. You are not required to accept this License, since you have not signed 
  266.       it.  However, nothing else grants you permission to modify or distribute 
  267.       the Program or its derivative works.  These actions are prohibited by law 
  268.       if you do not accept this License.  Therefore, by modifying or 
  269.       distributing the Program (or any work based on the Program), you indicate 
  270.       your acceptance of this License to do so, and all its terms and 
  271.       conditions for copying, distributing or modifying the Program or works 
  272.       based on it. 
  273.  
  274.    7. Each time you redistribute the Program (or any work based on the 
  275.       Program), the recipient automatically receives a license from the 
  276.       original licensor to copy, distribute or modify the Program subject to 
  277.       these terms and conditions.  You may not impose any further restrictions 
  278.       on the recipients' exercise of the rights granted herein. You are not 
  279.       responsible for enforcing compliance by third parties to this License. 
  280.  
  281.    8. If, as a consequence of a court judgment or allegation of patent 
  282.       infringement or for any other reason (not limited to patent issues), 
  283.       conditions are imposed on you (whether by court order, agreement or 
  284.       otherwise) that contradict the conditions of this License, they do not 
  285.       excuse you from the conditions of this License.  If you cannot distribute 
  286.       so as to satisfy simultaneously your obligations under this License and 
  287.       any other pertinent obligations, then as a consequence you may not 
  288.       distribute the Program at all.  For example, if a patent license would 
  289.       not permit royalty-free redistribution of the Program by all those who 
  290.       receive copies directly or indirectly through you, then the only way you 
  291.       could satisfy both it and this License would be to refrain entirely from 
  292.       distribution of the Program. 
  293.  
  294.       If any portion of this section is held invalid or unenforceable under any 
  295.       particular circumstance, the balance of the section is intended to apply 
  296.       and the section as a whole is intended to apply in other circumstances. 
  297.  
  298.       It is not the purpose of this section to induce you to infringe any 
  299.       patents or other property right claims or to contest validity of any such 
  300.       claims; this section has the sole purpose of protecting the integrity of 
  301.       the free software distribution system, which is implemented by public 
  302.       license practices.  Many people have made generous contributions to the 
  303.       wide range of software distributed through that system in reliance on 
  304.       consistent application of that system; it is up to the author/donor to 
  305.       decide if he or she is willing to distribute software through any other 
  306.       system and a licensee cannot impose that choice. 
  307.  
  308.       This section is intended to make thoroughly clear what is believed to be 
  309.       a consequence of the rest of this License. 
  310.  
  311.    9. If the distribution and/or use of the Program is restricted in certain 
  312.       countries either by patents or by copyrighted interfaces, the original 
  313.       copyright holder who places the Program under this License may add an 
  314.       explicit geographical distribution limitation excluding those countries, 
  315.       so that distribution is permitted only in or among countries not thus 
  316.       excluded.  In such case, this License incorporates the limitation as if 
  317.       written in the body of this License. 
  318.  
  319.   10. The Free Software Foundation may publish revised and/or new versions of 
  320.       the General Public License from time to time.  Such new versions will be 
  321.       similar in spirit to the present version, but may differ in detail to 
  322.       address new problems or concerns. 
  323.  
  324.       Each version is given a distinguishing version number.  If the Program 
  325.       specifies a version number of this License which applies to it and ``any 
  326.       later version'', you have the option of following the terms and 
  327.       conditions either of that version or of any later version published by 
  328.       the Free Software Foundation.  If the Program does not specify a version 
  329.       number of this License, you may choose any version ever published by the 
  330.       Free Software Foundation. 
  331.  
  332.   11. If you wish to incorporate parts of the Program into other free programs 
  333.       whose distribution conditions are different, write to the author to ask 
  334.       for permission.  For software which is copyrighted by the Free Software 
  335.       Foundation, write to the Free Software Foundation; we sometimes make 
  336.       exceptions for this.  Our decision will be guided by the two goals of 
  337.       preserving the free status of all derivatives of our free software and of 
  338.       promoting the sharing and reuse of software generally. 
  339.  
  340.                                       NO WARRANTY
  341.  
  342.   12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR 
  343.       THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN 
  344.       OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
  345.       PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER 
  346.       EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  347.       WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE 
  348.       ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 
  349.       SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY 
  350.       SERVICING, REPAIR OR CORRECTION. 
  351.  
  352.   13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 
  353.       WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 
  354.       REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 
  355.       DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL 
  356.       DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING 
  357.       BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR 
  358.       LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO 
  359.       OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS 
  360.       BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 
  361.  
  362.                            END OF TERMS AND CONDITIONS
  363.  
  364.  
  365. ΓòÉΓòÉΓòÉ 3.2. How to Apply These Terms to Your New Programs ΓòÉΓòÉΓòÉ
  366.  
  367.  If you develop a new program, and you want it to be of the greatest possible 
  368. use to the public, the best way to achieve this is to make it free software 
  369. which everyone can redistribute and change under these terms. 
  370.  
  371.  To do so, attach the following notices to the program.  It is safest to attach 
  372. them to the start of each source file to most effectively convey the exclusion 
  373. of warranty; and each file should have at least the ``copyright'' line and a 
  374. pointer to where the full notice is found. 
  375.  
  376. one line to give the program's name and a brief idea of what it does.
  377. Copyright (C) 19yy  name of author
  378.  
  379. This program is free software; you can redistribute it and/or modify
  380. it under the terms of the GNU General Public License as published by
  381. the Free Software Foundation; either version 2 of the License, or
  382. (at your option) any later version.
  383.  
  384. This program is distributed in the hope that it will be useful,
  385. but WITHOUT ANY WARRANTY; without even the implied warranty of
  386. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  387. GNU General Public License for more details.
  388.  
  389. You should have received a copy of the GNU General Public License
  390. along with this program; if not, write to the Free Software
  391. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  392.  
  393. Also add information on how to contact you by electronic and paper mail. 
  394.  
  395. If the program is interactive, make it output a short notice like this when it 
  396. starts in an interactive mode: 
  397.  
  398. Gnomovision version 69, Copyright (C) 19yy name of author
  399. Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
  400. type `show w'.
  401. This is free software, and you are welcome to redistribute it
  402. under certain conditions; type `show c' for details.
  403.  
  404. The hypothetical commands `show w' and `show c' should show the appropriate 
  405. parts of the General Public License.  Of course, the commands you use may be 
  406. called something other than `show w' and `show c'; they could even be 
  407. mouse-clicks or menu items---whatever suits your program. 
  408.  
  409. You should also get your employer (if you work as a programmer) or your school, 
  410. if any, to sign a ``copyright disclaimer'' for the program, if necessary.  Here 
  411. is a sample; alter the names: 
  412.  
  413. Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  414. `Gnomovision' (which makes passes at compilers) written by James Hacker.
  415.  
  416. signature of Ty Coon, 1 April 1989
  417. Ty Coon, President of Vice
  418.  
  419. This General Public License does not permit incorporating your program into 
  420. proprietary programs.  If your program is a subroutine library, you may 
  421. consider it more useful to permit linking proprietary applications with the 
  422. library.  If this is what you want to do, use the GNU Library General Public 
  423. License instead of this License. 
  424.  
  425.  
  426. ΓòÉΓòÉΓòÉ 4. Contributors to GNU CC ΓòÉΓòÉΓòÉ
  427.  
  428. In addition to Richard Stallman, several people have written parts of GNU CC. 
  429.  
  430.      The idea of using RTL and some of the optimization ideas came from the 
  431.       program PO written at the University of Arizona by Jack Davidson and 
  432.       Christopher Fraser.  See ``Register Allocation and Exhaustive Peephole 
  433.       Optimization'', Software Practice and Experience 14 (9), Sept. 1984, 
  434.       857-866. 
  435.  
  436.      Paul Rubin wrote most of the preprocessor. 
  437.  
  438.      Leonard Tower wrote parts of the parser, RTL generator, and RTL 
  439.       definitions, and of the Vax machine description. 
  440.  
  441.      Ted Lemon wrote parts of the RTL reader and printer. 
  442.  
  443.      Jim Wilson implemented loop strength reduction and some other loop 
  444.       optimizations. 
  445.  
  446.      Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed the 
  447.       support for the Sony NEWS machine. 
  448.  
  449.      Charles LaBrec contributed the support for the Integrated Solutions 68020 
  450.       system. 
  451.  
  452.      Michael Tiemann of Cygnus Support wrote the front end for C++, as well as 
  453.       the support for inline functions and instruction scheduling.  Also the 
  454.       descriptions of the National Semiconductor 32000 series cpu, the SPARC 
  455.       cpu and part of the Motorola 88000 cpu. 
  456.  
  457.      Gerald Baumgartner added the signature extension to the C++ front-end. 
  458.  
  459.      Jan Stein of the Chalmers Computer Society provided support for Genix, as 
  460.       well as part of the 32000 machine description. 
  461.  
  462.      Randy Smith finished the Sun FPA support. 
  463.  
  464.      Robert Brown implemented the support for Encore 32000 systems. 
  465.  
  466.      David Kashtan of SRI adapted GNU CC to VMS. 
  467.  
  468.      Alex Crain provided changes for the 3b1. 
  469.  
  470.      Greg Satz and Chris Hanson assisted in making GNU CC work on HP-UX for 
  471.       the 9000 series 300. 
  472.  
  473.      William Schelter did most of the work on the Intel 80386 support. 
  474.  
  475.      Christopher Smith did the port for Convex machines. 
  476.  
  477.      Paul Petersen wrote the machine description for the Alliant FX/8. 
  478.  
  479.      Dario Dariol contributed the four varieties of sample programs that print 
  480.       a copy of their source. 
  481.  
  482.      Alain Lichnewsky ported GNU CC to the Mips cpu. 
  483.  
  484.      Devon Bowen, Dale Wiles and Kevin Zachmann ported GNU CC to the Tahoe. 
  485.  
  486.      Jonathan Stone wrote the machine description for the Pyramid computer. 
  487.  
  488.      Gary Miller ported GNU CC to Charles River Data Systems machines. 
  489.  
  490.      Richard Kenner of the New York University Ultracomputer Research 
  491.       Laboratory wrote the machine descriptions for the AMD 29000, the DEC 
  492.       Alpha, the IBM RT PC, and the IBM RS/6000 as well as the support for 
  493.       instruction attributes.  He also made changes to better support RISC 
  494.       processors including changes to common subexpression elimination, 
  495.       strength reduction, function calling sequence handling, and condition 
  496.       code support, in addition to generalizing the code for frame pointer 
  497.       elimination. 
  498.  
  499.      Richard Kenner and Michael Tiemann jointly developed reorg.c, the delay 
  500.       slot scheduler. 
  501.  
  502.      Mike Meissner and Tom Wood of Data General finished the port to the 
  503.       Motorola 88000. 
  504.  
  505.      Masanobu Yuhara of Fujitsu Laboratories implemented the machine 
  506.       description for the Tron architecture (specifically, the Gmicro). 
  507.  
  508.      NeXT, Inc. donated the front end that supports the Objective C language. 
  509.  
  510.      James van Artsdalen wrote the code that makes efficient use of the Intel 
  511.       80387 register stack. 
  512.  
  513.      Mike Meissner at the Open Software Foundation finished the port to the 
  514.       MIPS cpu, including adding ECOFF debug support, and worked on the Intel 
  515.       port for the Intel 80386 cpu. 
  516.  
  517.      Ron Guilmette implemented the protoize and unprotoize tools, the support 
  518.       for Dwarf symbolic debugging information, and much of the support for 
  519.       System V Release 4.  He has also worked heavily on the Intel 386 and 860 
  520.       support. 
  521.  
  522.      Torbjorn Granlund implemented multiply- and divide-by-constant 
  523.       optimization, improved long long support, and improved leaf function 
  524.       register allocation. 
  525.  
  526.      Mike Stump implemented the support for Elxsi 64 bit CPU. 
  527.  
  528.      John Wehle added the machine description for the Western Electric 32000 
  529.       processor used in several 3b series machines (no relation to the National 
  530.       Semiconductor 32000 processor). 
  531.  
  532.      Holger Teutsch provided the support for the Clipper cpu. 
  533.  
  534.      Kresten Krab Thorup wrote the run time support for the Objective C 
  535.       language. 
  536.  
  537.      Stephen Moshier contributed the floating point emulator that assists in 
  538.       cross-compilation and permits support for floating point numbers wider 
  539.       than 64 bits. 
  540.  
  541.      David Edelsohn contributed the changes to RS/6000 port to make it support 
  542.       the PowerPC and POWER2 architectures. 
  543.  
  544.      Steve Chamberlain wrote the support for the Hitachi SH processor. 
  545.  
  546.      Peter Schauer wrote the code to allow debugging to work on the Alpha. 
  547.  
  548.      Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 
  549.       MIL-STD-1750A. 
  550.  
  551.      Michael K. Gschwind contributed the port to the PDP-11. 
  552.  
  553.  
  554. ΓòÉΓòÉΓòÉ 5. Funding Free Software ΓòÉΓòÉΓòÉ
  555.  
  556. If you want to have more free software a few years from now, it makes sense for 
  557. you to help encourage people to contribute funds for its development.  The most 
  558. effective approach known is to encourage commercial redistributors to donate. 
  559.  
  560. Users of free software systems can boost the pace of development by encouraging 
  561. for-a-fee distributors to donate part of their selling price to free software 
  562. developers---the Free Software Foundation, and others. 
  563.  
  564. The way to convince distributors to do this is to demand it and expect it from 
  565. them.  So when you compare distributors, judge them partly by how much they 
  566. give to free software development.  Show distributors they must compete to be 
  567. the one who gives the most. 
  568.  
  569. To make this approach work, you must insist on numbers that you can compare, 
  570. such as, ``We will donate ten dollars to the Frobnitz project for each disk 
  571. sold.''  Don't be satisfied with a vague promise, such as ``A portion of the 
  572. profits are donated,'' since it doesn't give a basis for comparison. 
  573.  
  574. Even a precise fraction ``of the profits from this disk'' is not very 
  575. meaningful, since creative accounting and unrelated business decisions can 
  576. greatly alter what fraction of the sales price counts as profit. If the price 
  577. you pay is $50, ten percent of the profit is probably less than a dollar; it 
  578. might be a few cents, or nothing at all. 
  579.  
  580. Some redistributors do development work themselves.  This is useful too; but to 
  581. keep everyone honest, you need to inquire how much they do, and what kind. 
  582. Some kinds of development make much more long-term difference than others.  For 
  583. example, maintaining a separate version of a program contributes very little; 
  584. maintaining the standard version of a program for the whole community 
  585. contributes much.  Easy new ports contribute little, since someone else would 
  586. surely do them; difficult ports such as adding a new CPU to the GNU C compiler 
  587. contribute more; major new features or packages contribute the most. 
  588.  
  589. By establishing the idea that supporting further development is ``the proper 
  590. thing to do'' when distributing free software for a fee, we can assure a steady 
  591. flow of resources into making more free software. 
  592.  
  593. Copyright (C) 1994 Free Software Foundation, Inc.
  594. Verbatim copying and redistribution of this section is permitted
  595. without royalty; alteration is not permitted.
  596.  
  597.  
  598. ΓòÉΓòÉΓòÉ 6. Protect Your Freedom---Fight ``Look And Feel'' ΓòÉΓòÉΓòÉ
  599.  
  600. This section is a political message from the League for Programming Freedom to 
  601. the users of GNU CC.  We have included it here because the issue of interface 
  602. copyright is important to the GNU project. 
  603.  
  604. Apple, Lotus, and now CDC have tried to create a new form of legal monopoly: a 
  605. copyright on a user interface. 
  606.  
  607. An interface is a kind of language---a set of conventions for communication 
  608. between two entities, human or machine.  Until a few years ago, the law seemed 
  609. clear: interfaces were outside the domain of copyright, so programmers could 
  610. program freely and implement whatever interface the users demanded.  Imitating 
  611. de-facto standard interfaces, sometimes with improvements, was standard 
  612. practice in the computer field.  These improvements, if accepted by the users, 
  613. caught on and became the norm; in this way, much progress took place. 
  614.  
  615. Computer users, and most software developers, were happy with this state of 
  616. affairs.  However, large companies such as Apple and Lotus would prefer a 
  617. different system---one in which they can own interfaces and thereby rid 
  618. themselves of all serious competitors.  They hope that interface copyright will 
  619. give them, in effect, monopolies on major classes of software. 
  620.  
  621. Other large companies such as IBM and Digital also favor interface monopolies, 
  622. for the same reason: if languages become property, they expect to own many 
  623. de-facto standard languages.  But Apple and Lotus are the ones who have 
  624. actually sued.  Apple's lawsuit was defeated, for reasons only partly related 
  625. to the general issue of interface copyright. 
  626.  
  627. Lotus won lawsuits against two small companies, which were thus put out of 
  628. business.  Then Lotus sued Borland; Lotus won in the trial court (no surprise, 
  629. since it was the same court that had ruled for Lotus twice before), but the 
  630. court of appeals ruled in favor of Borland, which was assisted by a 
  631. friend-of-the-court brief from the League for Programming Freedom. 
  632.  
  633. Lotus appealed the case to the Supreme Court, which heard the case but was 
  634. unable to reach a decision.  This failure means that the appeals court decision 
  635. stands, in one portion of the United States, and may influence the other 
  636. appeals courts, but it does not set a nationwide precedent.  The battle is not 
  637. over, and it is not limited to the United States. 
  638.  
  639. The battle is extending into other areas of software as well.  In 1995 a 
  640. company that produced a simulator for a CDC computer was shut down by a 
  641. copyright lawsuit, in which CDC charged that the simulator infringed the 
  642. copyright on the manuals for the computer. 
  643.  
  644. If the monopolists get their way, they will hobble the software field: 
  645.  
  646.      Gratuitous incompatibilities will burden users.  Imagine if each car 
  647.       manufacturer had to design a different way to start, stop, and steer a 
  648.       car. 
  649.  
  650.      Users will be ``locked in'' to whichever interface they learn; then they 
  651.       will be prisoners of one supplier, who will charge a monopolistic price. 
  652.  
  653.      Large companies have an unfair advantage wherever lawsuits become 
  654.       commonplace.  Since they can afford to sue, they can intimidate smaller 
  655.       developers with threats even when they don't really have a case. 
  656.  
  657.      Interface improvements will come slower, since incremental evolution 
  658.       through creative partial imitation will no longer occur. 
  659.  
  660.  If interface monopolies are accepted, other large companies are waiting to 
  661.  grab theirs: 
  662.  
  663.      Adobe is expected to claim a monopoly on the interfaces of various 
  664.       popular application programs, if Lotus ultimately wins the case against 
  665.       Borland. 
  666.  
  667.      Open Computing magazine reported a Microsoft vice president as 
  668.       threatening to sue people who imitate the interface of Windows. 
  669.  
  670.  Users invest a great deal of time and money in learning to use computer 
  671.  interfaces.  Far more, in fact, than software developers invest in developing 
  672.  and even implementing the interfaces.  Whoever can own an interface, has made 
  673.  its users into captives, and misappropriated their investment. 
  674.  
  675.  To protect our freedom from monopolies like these, a group of programmers and 
  676.  users have formed a grass-roots political organization, the League for 
  677.  Programming Freedom. 
  678.  
  679.  The purpose of the League is to oppose monopolistic practices such as 
  680.  interface copyright and software patents.  The League calls for a return to 
  681.  the legal policies of the recent past, in which programmers could program 
  682.  freely.  The League is not concerned with free software as an issue, and is 
  683.  not affiliated with the Free Software Foundation. 
  684.  
  685.  The League's activities include publicizing the issues, as is being done here, 
  686.  and filing friend-of-the-court briefs on behalf of defendants sued by 
  687.  monopolists. 
  688.  
  689.  The League's membership rolls include Donald Knuth, the foremost authority on 
  690.  algorithms, John McCarthy, inventor of Lisp, Marvin Minsky, founder of the MIT 
  691.  Artificial Intelligence lab, Guy L.  Steele, Jr., author of well-known books 
  692.  on Lisp and C, as well as Richard Stallman, the developer of GNU CC.  Please 
  693.  join and add your name to the list. Membership dues in the League are $42 per 
  694.  year for programmers, managers and professionals; $10.50 for students; $21 for 
  695.  others. 
  696.  
  697.  Activist members are especially important, but members who have no time to 
  698.  give are also important.  Surveys at major ACM conferences have indicated a 
  699.  vast majority of attendees agree with the League on both issues (interface 
  700.  copyrights and software patents).  If just ten percent of the programmers who 
  701.  agree with the League join the League, we will probably triumph. 
  702.  
  703.  To join, or for more information, phone (617) 243-4091 or write to: 
  704.  
  705.   League for Programming Freedom
  706.   1 Kendall Square #143
  707.   P.O. Box 9171
  708.   Cambridge, MA 02139
  709.  
  710.  You can also send electronic mail to lpf@uunet.uu.net. 
  711.  
  712.  In addition to joining the League, here are some suggestions from the League 
  713.  for other things you can do to protect your freedom to write programs: 
  714.  
  715.      Tell your friends and colleagues about this issue and how it threatens to 
  716.       ruin the computer industry. 
  717.  
  718.      Mention that you are a League member in your `.signature', and mention 
  719.       the League's email address for inquiries. 
  720.  
  721.      Ask the companies you consider working for or working with to make 
  722.       statements against software monopolies, and give preference to those that 
  723.       do. 
  724.  
  725.      When employers ask you to sign contracts giving them copyright on your 
  726.       work, insist on a clause saying they will not claim the copyright covers 
  727.       imitating the interface. 
  728.  
  729.      When employers ask you to sign contracts giving them patent rights, 
  730.       insist on clauses saying they can use these rights only defensively. 
  731.       Don't rely on ``company policy,'' since that can change at any time; 
  732.       don't rely on an individual executive's private word, since that person 
  733.       may be replaced.  Get a commitment just as binding as the commitment they 
  734.       get from you. 
  735.  
  736.      Write to Congress to explain the importance of these issues. 
  737.  
  738.             House Subcommittee on Intellectual Property
  739.             2137 Rayburn Bldg
  740.             Washington, DC 20515
  741.  
  742.             Senate Subcommittee on Patents, Trademarks and Copyrights
  743.             United States Senate
  744.             Washington, DC 20510
  745.  
  746.       (These committees have received lots of mail already; let's give them 
  747.       even more.) 
  748.  
  749.  Democracy means nothing if you don't use it.  Stand up and be counted! 
  750.  
  751.  
  752. ΓòÉΓòÉΓòÉ 7. Compile C, C++, or Objective C ΓòÉΓòÉΓòÉ
  753.  
  754. The C, C++, and Objective C versions of the compiler are integrated; the GNU C 
  755. compiler can compile programs written in C, C++, or Objective C. 
  756.  
  757. ``GCC'' is a common shorthand term for the GNU C compiler.  This is both the 
  758. most general name for the compiler, and the name used when the emphasis is on 
  759. compiling C programs. 
  760.  
  761. When referring to C++ compilation, it is usual to call the compiler ``G++''. 
  762. Since there is only one compiler, it is also accurate to call it ``GCC'' no 
  763. matter what the language context; however, the term ``G++'' is more useful when 
  764. the emphasis is on compiling C++ programs. 
  765.  
  766. We use the name ``GNU CC'' to refer to the compilation system as a whole, and 
  767. more specifically to the language-independent part of the compiler.  For 
  768. example, we refer to the optimization options as affecting the behavior of 
  769. ``GNU CC'' or sometimes just ``the compiler''. 
  770.  
  771. Front ends for other languages, such as Ada 9X, Fortran, Modula-3, and Pascal, 
  772. are under development.  These front-ends, like that for C++, are built in 
  773. subdirectories of GNU CC and link to it.  The result is an integrated compiler 
  774. that can compile programs written in C, C++, Objective C, or any of the 
  775. languages for which you have installed front ends. 
  776.  
  777. In this manual, we only discuss the options for the C, Objective-C, and C++ 
  778. compilers and those of the GNU CC core.  Consult the documentation of the other 
  779. front ends for the options to use when compiling programs written in other 
  780. languages. 
  781.  
  782. G++ is a compiler, not merely a preprocessor.  G++ builds object code directly 
  783. from your C++ program source.  There is no intermediate C version of the 
  784. program.  (By contrast, for example, some other implementations use a program 
  785. that generates a C program from your C++ source.)  Avoiding an intermediate C 
  786. representation of the program means that you get better object code, and better 
  787. debugging information.  The GNU debugger, GDB, works with this information in 
  788. the object code to give you comprehensive C++ source-level editing capabilities 
  789. (see C and C++). 
  790.  
  791.  
  792. ΓòÉΓòÉΓòÉ 8. GNU CC Command Options ΓòÉΓòÉΓòÉ
  793.  
  794. When you invoke GNU CC, it normally does preprocessing, compilation, assembly 
  795. and linking.  The ``overall options'' allow you to stop this process at an 
  796. intermediate stage.  For example, the `-c' option says not to run the linker. 
  797. Then the output consists of object files output by the assembler. 
  798.  
  799. Other options are passed on to one stage of processing.  Some options control 
  800. the preprocessor and others the compiler itself.  Yet other options control the 
  801. assembler and linker; most of these are not documented here, since you rarely 
  802. need to use any of them. 
  803.  
  804. Most of the command line options that you can use with GNU CC are useful for C 
  805. programs; when an option is only useful with another language (usually C++), 
  806. the explanation says so explicitly.  If the description for a particular option 
  807. does not mention a source language, you can use that option with all supported 
  808. languages. 
  809.  
  810. See Compiling C++ Programs, for a summary of special options for compiling C++ 
  811. programs. 
  812.  
  813. The gcc program accepts options and file names as operands.  Many options have 
  814. multiletter names; therefore multiple single-letter options may not be grouped: 
  815. `-dr' is very different from `-d -r'. 
  816.  
  817. You can mix options and other arguments.  For the most part, the order you use 
  818. doesn't matter.  Order does matter when you use several options of the same 
  819. kind; for example, if you specify `-L' more than once, the directories are 
  820. searched in the order specified. 
  821.  
  822. Many options have long names starting with `-f' or with `-W'---for example, 
  823. `-fforce-mem', `-fstrength-reduce', `-Wformat' and so on.  Most of these have 
  824. both positive and negative forms; the negative form of `-ffoo' would be 
  825. `-fno-foo'.  This manual documents only one of these two forms, whichever one 
  826. is not the default. 
  827.  
  828.  Option Summary                          Brief list of all options, without 
  829.                                          explanations. 
  830.  Overall Options                         Controlling the kind of output: 
  831.              an executable, object files, assembler files,             or 
  832.  preprocessed source. 
  833.  
  834.  Invoking G++                            Compiling C++ programs. 
  835.  C Dialect Options                       Controlling the variant of C language 
  836.                                          compiled. 
  837.  C++ Dialect Options                     Variations on C++. 
  838.  Warning Options                         How picky should the compiler be? 
  839.  Debugging Options                       Symbol tables, measurements, and 
  840.                                          debugging dumps. 
  841.  Optimize Options                        How much optimization? 
  842.  Preprocessor Options                    Controlling header files and macro 
  843.                                          definitions. 
  844.               Also, getting dependency information for Make. 
  845.  
  846.  Assembler Options                       Passing options to the assembler. 
  847.  Link Options                            Specifying libraries and so on. 
  848.  Directory Options                       Where to find header files and 
  849.                                          libraries. 
  850.              Where to find the compiler executable files. 
  851.  
  852.  Target Options                          Running a cross-compiler, or an old 
  853.                                          version of GNU CC. 
  854.  Submodel Options                        Specifying minor hardware or 
  855.                                          convention variations, 
  856.              such as 68010 vs 68020. 
  857.  
  858.  Code Gen Options                        Specifying conventions for function 
  859.                                          calls, data layout 
  860.              and register usage. 
  861.  
  862.  Environment Variables                   Env vars that affect GNU CC. 
  863.  Running Protoize                        Automatically adding or removing 
  864.                                          function prototypes. 
  865.  
  866.  
  867. ΓòÉΓòÉΓòÉ 8.1. Option Summary ΓòÉΓòÉΓòÉ
  868.  
  869. Here is a summary of all the options, grouped by type.  Explanations are in the 
  870. following sections. 
  871.  
  872.  Overall Options 
  873.            See Options Controlling the Kind of Output. 
  874.  
  875.                       -c  -S  -E  -o file  -pipe  -v  -x language
  876.  
  877.  C Language Options 
  878.            See Options Controlling C Dialect. 
  879.  
  880.                       -ansi  -fallow-single-precision -fcond-mismatch  -fno-asm
  881.                       -fno-builtin  -fsigned-bitfields  -fsigned-char
  882.                       -funsigned-bitfields  -funsigned-char  -fwritable-strings
  883.                       -traditional  -traditional-cpp  -trigraphs
  884.  
  885.  C++ Language Options 
  886.            See Options Controlling C++ Dialect. 
  887.  
  888.                       -fall-virtual  -fdollars-in-identifiers  -felide-constructors
  889.                       -fenum-int-equiv -fexternal-templates  -ffor-scope -fno-for-scope
  890.                       -fhandle-signatures -fmemoize-lookups  -fno-default-inline -fno-gnu-keywords
  891.                       -fnonnull-objects  -foperator-names  -fstrict-prototype
  892.                       -fthis-is-variable -nostdinc++ -traditional  +en
  893.  
  894.  Warning Options 
  895.            See Options to Request or Suppress Warnings. 
  896.  
  897.                       -fsyntax-only  -pedantic  -pedantic-errors
  898.                       -w  -W  -Wall  -Waggregate-return  -Wbad-function-cast
  899.                       -Wcast-align -Wcast-qual  -Wchar-subscript  -Wcomment
  900.                       -Wconversion -Wenum-clash  -Werror  -Wformat
  901.                       -Wid-clash-len  -Wimplicit  -Wimport  -Winline
  902.                       -Wlarger-than-len  -Wmissing-declarations
  903.                       -Wmissing-prototypes  -Wnested-externs
  904.                       -Wno-import  -Woverloaded-virtual -Wparentheses
  905.                       -Wpointer-arith  -Wredundant-decls -Wreorder -Wreturn-type -Wshadow
  906.                       -Wstrict-prototypes  -Wswitch  -Wsynth  -Wtemplate-debugging
  907.                       -Wtraditional  -Wtrigraphs -Wuninitialized  -Wunused
  908.                       -Wwrite-strings
  909.  
  910.  Debugging Options 
  911.            See Options for Debugging Your Program or GCC. 
  912.  
  913.                       -a  -dletters  -fpretend-float
  914.                       -g  -glevel -gcoff  -gdwarf  -gdwarf+
  915.                       -ggdb  -gstabs  -gstabs+  -gxcoff  -gxcoff+
  916.                       -p  -pg  -print-file-name=library  -print-libgcc-file-name
  917.                       -print-prog-name=program  -print-search-dirs  -save-temps
  918.                       -fbounds-checking
  919.  
  920.  Optimization Options 
  921.            See Options that Control Optimization. 
  922.  
  923.                       -fcaller-saves  -fcse-follow-jumps  -fcse-skip-blocks
  924.                       -fdelayed-branch   -fexpensive-optimizations
  925.                       -ffast-math  -ffloat-store  -fforce-addr  -fforce-mem
  926.                       -finline-functions  -fkeep-inline-functions
  927.                       -fno-default-inline  -fno-defer-pop  -fno-function-cse
  928.                       -fno-inline  -fno-peephole  -fomit-frame-pointer
  929.                       -frerun-cse-after-loop  -fschedule-insns
  930.                       -fschedule-insns2  -fstrength-reduce  -fthread-jumps
  931.                       -funroll-all-loops  -funroll-loops
  932.                       -O  -O0  -O1  -O2  -O3
  933.  
  934.  Preprocessor Options 
  935.            See Options Controlling the Preprocessor. 
  936.  
  937.                       -Aquestion(answer)  -C  -dD  -dM  -dN
  938.                       -Dmacro[=defn]  -E  -H
  939.                       -idirafter dir
  940.                       -include file  -imacros file
  941.                       -iprefix file  -iwithprefix dir
  942.                       -iwithprefixbefore dir  -isystem dir
  943.                       -M  -MD  -MM  -MMD  -MG  -nostdinc  -P  -trigraphs
  944.                       -undef  -Umacro  -Wp,option
  945.  
  946.  Assembler Option 
  947.            See Passing Options to the Assembler. 
  948.  
  949.                       -Wa,option
  950.  
  951.  Linker Options 
  952.            See Options for Linking. 
  953.  
  954.                       object-file-name  -llibrary
  955.                       -nostartfiles  -nodefaultlibs  -nostdlib
  956.                       -s  -static  -shared  -symbolic
  957.                       -Wl,option  -Xlinker option
  958.                       -u symbol
  959.  
  960.  Directory Options 
  961.            See Options for Directory Search. 
  962.  
  963.                       -Bprefix  -Idir  -I-  -Ldir
  964.  
  965.  Target Options 
  966.            See Target Options. 
  967.  
  968.                       -b machine  -V version
  969.  
  970.  Machine Dependent Options 
  971.            See Hardware Models and Configurations. 
  972.  
  973.                       M680x0 Options
  974.                       -m68000  -m68020  -m68020-40  -m68030  -m68040  -m68881
  975.                       -mbitfield  -mc68000  -mc68020  -mfpa  -mnobitfield
  976.                       -mrtd  -mshort  -msoft-float
  977.  
  978.                       VAX Options
  979.                       -mg  -mgnu  -munix
  980.  
  981.                       SPARC Options
  982.                       -mapp-regs  -mcypress  -mepilogue  -mflat  -mfpu  -mhard-float
  983.                       -mhard-quad-float  -mno-app-regs  -mno-flat  -mno-fpu
  984.                       -mno-epilogue  -mno-unaligned-doubles
  985.                       -msoft-float  -msoft-quad-float
  986.                       -msparclite  -msupersparc  -munaligned-doubles  -mv8
  987.  
  988.                       SPARC V9 compilers support the following options
  989.                       in addition to the above:
  990.  
  991.                       -mmedlow  -mmedany
  992.                       -mint32  -mint64  -mlong32  -mlong64
  993.                       -mno-stack-bias  -mstack-bias
  994.  
  995.                       Convex Options
  996.                       -mc1  -mc2  -mc32  -mc34  -mc38
  997.                       -margcount  -mnoargcount
  998.                       -mlong32  -mlong64
  999.                       -mvolatile-cache  -mvolatile-nocache
  1000.  
  1001.                       AMD29K Options
  1002.                       -m29000  -m29050  -mbw  -mnbw  -mdw  -mndw
  1003.                       -mlarge  -mnormal  -msmall
  1004.                       -mkernel-registers  -mno-reuse-arg-regs
  1005.                       -mno-stack-check  -mno-storem-bug
  1006.                       -mreuse-arg-regs  -msoft-float  -mstack-check
  1007.                       -mstorem-bug  -muser-registers
  1008.  
  1009.                       ARM Options
  1010.                       -mapcs -m2 -m3 -m6 -mbsd -mxopen -mno-symrename
  1011.  
  1012.                       M88K Options
  1013.                       -m88000  -m88100  -m88110  -mbig-pic
  1014.                       -mcheck-zero-division  -mhandle-large-shift
  1015.                       -midentify-revision  -mno-check-zero-division
  1016.                       -mno-ocs-debug-info  -mno-ocs-frame-position
  1017.                       -mno-optimize-arg-area  -mno-serialize-volatile
  1018.                       -mno-underscores  -mocs-debug-info
  1019.                       -mocs-frame-position  -moptimize-arg-area
  1020.                       -mserialize-volatile  -mshort-data-num  -msvr3
  1021.                       -msvr4  -mtrap-large-shift  -muse-div-instruction
  1022.                       -mversion-03.00  -mwarn-passed-structs
  1023.  
  1024.                       RS/6000 and PowerPC Options
  1025.                       -mcpu=cpu  type
  1026.                       -mpower  -mno-power  -mpower2  -mno-power2
  1027.                       -mpowerpc  -mno-powerpc
  1028.                       -mpowerpc-gpopt  -mno-powerpc-gpopt
  1029.                       -mpowerpc-gfxopt  -mno-powerpc-gfxopt
  1030.                       -mnew-mnemonics  -mno-new-mnemonics
  1031.                       -mfull-toc   -mminimal-toc  -mno-fop-in-toc  -mno-sum-in-toc
  1032.                       -msoft-float  -mhard-float -mmultiple -mno-multiple
  1033.                       -mstring -mno-string -mbit-align -mno-bit-align
  1034.                       -mstrict-align -mno-strict-align -mrelocatable -mno-relocatable
  1035.                       -mtoc -mno-toc -mtraceback -mno-traceback
  1036.                       -mlittle -mlittle-endian -mbig -mbig-endian
  1037.                       -mcall-aix -mcall-sysv -mprototype
  1038.  
  1039.                       RT Options
  1040.                       -mcall-lib-mul  -mfp-arg-in-fpregs  -mfp-arg-in-gregs
  1041.                       -mfull-fp-blocks  -mhc-struct-return  -min-line-mul
  1042.                       -mminimum-fp-blocks  -mnohc-struct-return
  1043.  
  1044.                       MIPS Options
  1045.                       -mabicalls  -mcpu=cpu  type  -membedded-data
  1046.                       -membedded-pic  -mfp32  -mfp64  -mgas  -mgp32  -mgp64
  1047.                       -mgpopt  -mhalf-pic  -mhard-float  -mint64 -mips1
  1048.                       -mips2 -mips3  -mlong64  -mlong-calls  -mmemcpy
  1049.                       -mmips-as  -mmips-tfile  -mno-abicalls
  1050.                       -mno-embedded-data  -mno-embedded-pic
  1051.                       -mno-gpopt  -mno-long-calls
  1052.                       -mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats
  1053.                       -mrnames -msoft-float
  1054.                       -m4650 -msingle-float -mmad
  1055.                       -mstats  -EL  -EB  -G num  -nocpp
  1056.  
  1057.                       i386 Options
  1058.                       -m486  -m386 -mieee-fp  -mno-fancy-math-387
  1059.                       -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
  1060.                       -mno-wide-multiply -mrtd -malign-double
  1061.                       -mreg-alloc=list -mregparm=num
  1062.                       -malign-jumps=num -malign-loops=num
  1063.                       -malign-functions=num
  1064.  
  1065.                       HPPA Options
  1066.                       -mdisable-fpregs  -mdisable-indexing  -mfast-indirect-calls
  1067.                       -mgas  -mjump-in-delay -mlong-millicode-calls -mno-disable-fpregs
  1068.                       -mno-disable-indexing -mno-fast-indirect-calls -mno-gas
  1069.                       -mno-jump-in-delay -mno-millicode-long-calls
  1070.                       -mno-portable-runtime -mno-soft-float -msoft-float
  1071.                       -mpa-risc-1-0  -mpa-risc-1-1  -mportable-runtime -mschedule=list
  1072.  
  1073.                       Intel 960 Options
  1074.                       -mcpu type  -masm-compat  -mclean-linkage
  1075.                       -mcode-align  -mcomplex-addr  -mleaf-procedures
  1076.                       -mic-compat  -mic2.0-compat  -mic3.0-compat
  1077.                       -mintel-asm  -mno-clean-linkage  -mno-code-align
  1078.                       -mno-complex-addr  -mno-leaf-procedures
  1079.                       -mno-old-align  -mno-strict-align  -mno-tail-call
  1080.                       -mnumerics  -mold-align  -msoft-float  -mstrict-align
  1081.                       -mtail-call
  1082.  
  1083.                       DEC Alpha Options
  1084.                       -mfp-regs  -mno-fp-regs  -mno-soft-float
  1085.                       -msoft-float
  1086.  
  1087.                       Clipper Options
  1088.                       -mc300 -mc400
  1089.  
  1090.                       H8/300 Options
  1091.                       -mrelax  -mh
  1092.  
  1093.                       System V Options
  1094.                       -Qy  -Qn  -YP,paths  -Ym,dir
  1095.  
  1096.  Code Generation Options 
  1097.            See Options for Code Generation Conventions. 
  1098.  
  1099.                       -fcall-saved-reg  -fcall-used-reg
  1100.                       -ffixed-reg  -finhibit-size-directive
  1101.                       -fno-common  -fno-ident  -fno-gnu-linker
  1102.                       -fpcc-struct-return  -fpic  -fPIC
  1103.                       -freg-struct-return  -fshared-data  -fshort-enums
  1104.                       -fshort-double  -fvolatile  -fvolatile-global
  1105.                       -fverbose-asm -fpack-struct +e0  +e1
  1106.  
  1107.  Overall Options                         Controlling the kind of output: 
  1108.              an executable, object files, assembler files,             or 
  1109.  preprocessed source. 
  1110.  
  1111.  C Dialect Options                       Controlling the variant of C language 
  1112.                                          compiled. 
  1113.  C++ Dialect Options                     Variations on C++. 
  1114.  Warning Options                         How picky should the compiler be? 
  1115.  Debugging Options                       Symbol tables, measurements, and 
  1116.                                          debugging dumps. 
  1117.  Optimize Options                        How much optimization? 
  1118.  Preprocessor Options                    Controlling header files and macro 
  1119.                                          definitions. 
  1120.               Also, getting dependency information for Make. 
  1121.  
  1122.  Assembler Options                       Passing options to the assembler. 
  1123.  Link Options                            Specifying libraries and so on. 
  1124.  Directory Options                       Where to find header files and 
  1125.                                          libraries. 
  1126.              Where to find the compiler executable files. 
  1127.  
  1128.  Target Options                          Running a cross-compiler, or an old 
  1129.                                          version of GNU CC. 
  1130.  
  1131.  
  1132. ΓòÉΓòÉΓòÉ 8.2. Options Controlling the Kind of Output ΓòÉΓòÉΓòÉ
  1133.  
  1134. Compilation can involve up to four stages: preprocessing, compilation proper, 
  1135. assembly and linking, always in that order.  The first three stages apply to an 
  1136. individual source file, and end by producing an object file; linking combines 
  1137. all the object files (those newly compiled, and those specified as input) into 
  1138. an executable file. 
  1139.  
  1140. For any given input file, the file name suffix determines what kind of 
  1141. compilation is done: 
  1142.  
  1143.  file.c 
  1144.            C source code which must be preprocessed. 
  1145.  
  1146.  file.i 
  1147.            C source code which should not be preprocessed. 
  1148.  
  1149.  file.ii 
  1150.            C++ source code which should not be preprocessed. 
  1151.  
  1152.  file.m 
  1153.            Objective-C source code.  Note that you must link with the library 
  1154.            `libobjc.a' to make an Objective-C program work. 
  1155.  
  1156.  file.h 
  1157.            C header file (not to be compiled or linked). 
  1158.  
  1159.  file.cc 
  1160.  file.cxx 
  1161.  file.cpp 
  1162.  file.C 
  1163.            C++ source code which must be preprocessed.  Note that in `.cxx', 
  1164.            the last two letters must both be literally `x'.  Likewise, `.C' 
  1165.            refers to a literal capital C. 
  1166.  
  1167.  file.s 
  1168.            Assembler code. 
  1169.  
  1170.  file.S 
  1171.            Assembler code which must be preprocessed. 
  1172.  
  1173.  other 
  1174.            An object file to be fed straight into linking. Any file name with 
  1175.            no recognized suffix is treated this way. 
  1176.  
  1177.  You can specify the input language explicitly with the `-x' option: 
  1178.  
  1179.  -x language 
  1180.            Specify explicitly the language for the following input files 
  1181.            (rather than letting the compiler choose a default based on the file 
  1182.            name suffix).  This option applies to all following input files 
  1183.            until the next `-x' option.  Possible values for language are: 
  1184.  
  1185.                       c  objective-c  c++
  1186.                       c-header  cpp-output  c++-cpp-output
  1187.                       assembler  assembler-with-cpp
  1188.  
  1189.  -x none 
  1190.            Turn off any specification of a language, so that subsequent files 
  1191.            are handled according to their file name suffixes (as they are if 
  1192.            `-x' has not been used at all). 
  1193.  
  1194.  If you only want some of the stages of compilation, you can use `-x' (or 
  1195.  filename suffixes) to tell gcc where to start, and one of the options `-c', 
  1196.  `-S', or `-E' to say where gcc is to stop.  Note that some combinations (for 
  1197.  example, `-x cpp-output -E' instruct gcc to do nothing at all. 
  1198.  
  1199.  -c 
  1200.            Compile or assemble the source files, but do not link.  The linking 
  1201.            stage simply is not done.  The ultimate output is in the form of an 
  1202.            object file for each source file. 
  1203.  
  1204.            By default, the object file name for a source file is made by 
  1205.            replacing the suffix `.c', `.i', `.s', etc., with `.o'. 
  1206.  
  1207.            Unrecognized input files, not requiring compilation or assembly, are 
  1208.            ignored. 
  1209.  
  1210.  -S 
  1211.            Stop after the stage of compilation proper; do not assemble.  The 
  1212.            output is in the form of an assembler code file for each 
  1213.            non-assembler input file specified. 
  1214.  
  1215.            By default, the assembler file name for a source file is made by 
  1216.            replacing the suffix `.c', `.i', etc., with `.s'. 
  1217.  
  1218.            Input files that don't require compilation are ignored. 
  1219.  
  1220.  -E 
  1221.            Stop after the preprocessing stage; do not run the compiler proper. 
  1222.            The output is in the form of preprocessed source code, which is sent 
  1223.            to the standard output. 
  1224.  
  1225.            Input files which don't require preprocessing are ignored. 
  1226.  
  1227.  -o file 
  1228.            Place output in file file.  This applies regardless to whatever sort 
  1229.            of output is being produced, whether it be an executable file, an 
  1230.            object file, an assembler file or preprocessed C code. 
  1231.  
  1232.            Since only one output file can be specified, it does not make sense 
  1233.            to use `-o' when compiling more than one input file, unless you are 
  1234.            producing an executable file as output. 
  1235.  
  1236.            If `-o' is not specified, the default is to put an executable file 
  1237.            in `a.out', the object file for `source.suffix' in `source.o', its 
  1238.            assembler file in `source.s', and all preprocessed C source on 
  1239.            standard output. 
  1240.  
  1241.  -v 
  1242.            Print (on standard error output) the commands executed to run the 
  1243.            stages of compilation.  Also print the version number of the 
  1244.            compiler driver program and of the preprocessor and the compiler 
  1245.            proper. 
  1246.  
  1247.  -pipe 
  1248.            Use pipes rather than temporary files for communication between the 
  1249.            various stages of compilation.  This fails to work on some systems 
  1250.            where the assembler is unable to read from a pipe; but the GNU 
  1251.            assembler has no trouble. 
  1252.  
  1253.  
  1254. ΓòÉΓòÉΓòÉ 8.3. Compiling C++ Programs ΓòÉΓòÉΓòÉ
  1255.  
  1256. C++ source files conventionally use one of the suffixes `.C', `.cc', `cpp', or 
  1257. `.cxx'; preprocessed C++ files use the suffix `.ii'.  GNU CC recognizes files 
  1258. with these names and compiles them as C++ programs even if you call the 
  1259. compiler the same way as for compiling C programs (usually with the name gcc). 
  1260.  
  1261. However, C++ programs often require class libraries as well as a compiler that 
  1262. understands the C++ language---and under some circumstances, you might want to 
  1263. compile programs from standard input, or otherwise without a suffix that flags 
  1264. them as C++ programs. g++ is a program that calls GNU CC with the default 
  1265. language set to C++, and automatically specifies linking against the GNU class 
  1266. library libg++. (1) On many systems, the script g++ is also installed with the 
  1267. name c++. 
  1268.  
  1269. When you compile C++ programs, you may specify many of the same command-line 
  1270. options that you use for compiling programs in any language; or command-line 
  1271. options meaningful for C and related languages; or options that are meaningful 
  1272. only for C++ programs. See Options Controlling C Dialect, for explanations of 
  1273. options for languages related to C. See Options Controlling C++ Dialect, for 
  1274. explanations of options that are meaningful only for C++ programs. 
  1275.  
  1276.  
  1277. ΓòÉΓòÉΓòÉ 8.4. Options Controlling C Dialect ΓòÉΓòÉΓòÉ
  1278.  
  1279. The following options control the dialect of C (or languages derived from C, 
  1280. such as C++ and Objective C) that the compiler accepts: 
  1281.  
  1282.  -ansi 
  1283.            Support all ANSI standard C programs. 
  1284.  
  1285.            This turns off certain features of GNU C that are incompatible with 
  1286.            ANSI C, such as the asm, inline and typeof keywords, and predefined 
  1287.            macros such as unix and vax that identify the type of system you are 
  1288.            using.  It also enables the undesirable and rarely used ANSI 
  1289.            trigraph feature, disallows `$' as part of identifiers, and disables 
  1290.            recognition of C++ style `//' comments. 
  1291.  
  1292.            The alternate keywords __asm__, __extension__, __inline__ and 
  1293.            __typeof__ continue to work despite `-ansi'.  You would not want to 
  1294.            use them in an ANSI C program, of course, but it is useful to put 
  1295.            them in header files that might be included in compilations done 
  1296.            with `-ansi'.  Alternate predefined macros such as __unix__ and 
  1297.            __vax__ are also available, with or without `-ansi'. 
  1298.  
  1299.            The `-ansi' option does not cause non-ANSI programs to be rejected 
  1300.            gratuitously.  For that, `-pedantic' is required in addition to 
  1301.            `-ansi'.  See Warning Options. 
  1302.  
  1303.            The macro __STRICT_ANSI__ is predefined when the `-ansi' option is 
  1304.            used.  Some header files may notice this macro and refrain from 
  1305.            declaring certain functions or defining certain macros that the ANSI 
  1306.            standard doesn't call for; this is to avoid interfering with any 
  1307.            programs that might use these names for other things. 
  1308.  
  1309.            The functions alloca, abort, exit, and _exit are not builtin 
  1310.            functions when `-ansi' is used. 
  1311.  
  1312.  -fno-asm 
  1313.            Do not recognize asm, inline or typeof as a keyword, so that code 
  1314.            can use these words as identifiers.  You can use the keywords 
  1315.            __asm__, __inline__ and __typeof__ instead.  `-ansi' implies 
  1316.            `-fno-asm'. 
  1317.  
  1318.            In C++, this switch only affects the typeof keyword, since asm and 
  1319.            inline are standard keywords.  You may want to use the 
  1320.            `-fno-gnu-keywords' flag instead, as it also disables the other, 
  1321.            C++-specific, extension keywords such as headof. 
  1322.  
  1323.  -fno-builtin 
  1324.            Don't recognize builtin functions that do not begin with two leading 
  1325.            underscores.  Currently, the functions affected include abort, abs, 
  1326.            alloca, cos, exit, fabs, ffs, labs, memcmp, memcpy, sin, sqrt, 
  1327.            strcmp, strcpy, and strlen. 
  1328.  
  1329.            GCC normally generates special code to handle certain builtin 
  1330.            functions more efficiently; for instance, calls to alloca may become 
  1331.            single instructions that adjust the stack directly, and calls to 
  1332.            memcpy may become inline copy loops.  The resulting code is often 
  1333.            both smaller and faster, but since the function calls no longer 
  1334.            appear as such, you cannot set a breakpoint on those calls, nor can 
  1335.            you change the behavior of the functions by linking with a different 
  1336.            library. 
  1337.  
  1338.            The `-ansi' option prevents alloca and ffs from being builtin 
  1339.            functions, since these functions do not have an ANSI standard 
  1340.            meaning. 
  1341.  
  1342.  -trigraphs 
  1343.            Support ANSI C trigraphs.  You don't want to know about this 
  1344.            brain-damage.  The `-ansi' option implies `-trigraphs'. 
  1345.  
  1346.  -traditional 
  1347.            Attempt to support some aspects of traditional C compilers. 
  1348.            Specifically: 
  1349.  
  1350.                All extern declarations take effect globally even if they are 
  1351.                 written inside of a function definition.  This includes 
  1352.                 implicit declarations of functions. 
  1353.  
  1354.                The newer keywords typeof, inline, signed, const and volatile 
  1355.                 are not recognized.  (You can still use the alternative 
  1356.                 keywords such as __typeof__, __inline__, and so on.) 
  1357.  
  1358.                Comparisons between pointers and integers are always allowed. 
  1359.  
  1360.                Integer types unsigned short and unsigned char promote to 
  1361.                 unsigned int. 
  1362.  
  1363.                Out-of-range floating point literals are not an error. 
  1364.  
  1365.                Certain constructs which ANSI regards as a single invalid 
  1366.                 preprocessing number, such as `0xe-0xd', are treated as 
  1367.                 expressions instead. 
  1368.  
  1369.                String ``constants'' are not necessarily constant; they are 
  1370.                 stored in writable space, and identical looking constants are 
  1371.                 allocated separately.  (This is the same as the effect of 
  1372.                 `-fwritable-strings'.) 
  1373.  
  1374.                All automatic variables not declared register are preserved by 
  1375.                 longjmp.  Ordinarily, GNU C follows ANSI C: automatic variables 
  1376.                 not declared volatile may be clobbered. 
  1377.  
  1378.                The character escape sequences `\x' and `\a' evaluate as the 
  1379.                 literal characters `x' and `a' respectively.  Without 
  1380.                 `-traditional', `\x' is a prefix for the hexadecimal 
  1381.                 representation of a character, and `\a' produces a bell. 
  1382.  
  1383.                In C++ programs, assignment to this is permitted with 
  1384.                 `-traditional'.  (The option `-fthis-is-variable' also has this 
  1385.                 effect.) 
  1386.  
  1387.            You may wish to use `-fno-builtin' as well as `-traditional' if your 
  1388.            program uses names that are normally GNU C builtin functions for 
  1389.            other purposes of its own. 
  1390.  
  1391.            You cannot use `-traditional' if you include any header files that 
  1392.            rely on ANSI C features.  Some vendors are starting to ship systems 
  1393.            with ANSI C header files and you cannot use `-traditional' on such 
  1394.            systems to compile files that include any system headers. 
  1395.  
  1396.            In the preprocessor, comments convert to nothing at all, rather than 
  1397.            to a space.  This allows traditional token concatenation. 
  1398.  
  1399.            In preprocessing directive, the `#' symbol must appear as the first 
  1400.            character of a line. 
  1401.  
  1402.            In the preprocessor, macro arguments are recognized within string 
  1403.            constants in a macro definition (and their values are stringified, 
  1404.            though without additional quote marks, when they appear in such a 
  1405.            context).  The preprocessor always considers a string constant to 
  1406.            end at a newline. 
  1407.  
  1408.            The predefined macro __STDC__ is not defined when you use 
  1409.            `-traditional', but __GNUC__ is (since the GNU extensions which 
  1410.            __GNUC__ indicates are not affected by `-traditional').  If you need 
  1411.            to write header files that work differently depending on whether 
  1412.            `-traditional' is in use, by testing both of these predefined macros 
  1413.            you can distinguish four situations: GNU C, traditional GNU C, other 
  1414.            ANSI C compilers, and other old C compilers.  The predefined macro 
  1415.            __STDC_VERSION__ is also not defined when you use `-traditional'. 
  1416.            See Standard Predefined Macros, for more discussion of these and 
  1417.            other predefined macros. 
  1418.  
  1419.            The preprocessor considers a string constant to end at a newline 
  1420.            (unless the newline is escaped with `\').  (Without `-traditional', 
  1421.            string constants can contain the newline character as typed.) 
  1422.  
  1423.  -traditional-cpp 
  1424.            Attempt to support some aspects of traditional C preprocessors. This 
  1425.            includes the last five items in the table immediately above, but 
  1426.            none of the other effects of `-traditional'. 
  1427.  
  1428.  -fcond-mismatch 
  1429.            Allow conditional expressions with mismatched types in the second 
  1430.            and third arguments.  The value of such an expression is void. 
  1431.  
  1432.  -funsigned-char 
  1433.            Let the type char be unsigned, like unsigned char. 
  1434.  
  1435.            Each kind of machine has a default for what char should be.  It is 
  1436.            either like unsigned char by default or like signed char by default. 
  1437.  
  1438.            Ideally, a portable program should always use signed char or 
  1439.            unsigned char when it depends on the signedness of an object. But 
  1440.            many programs have been written to use plain char and expect it to 
  1441.            be signed, or expect it to be unsigned, depending on the machines 
  1442.            they were written for.  This option, and its inverse, let you make 
  1443.            such a program work with the opposite default. 
  1444.  
  1445.            The type char is always a distinct type from each of signed char or 
  1446.            unsigned char, even though its behavior is always just like one of 
  1447.            those two. 
  1448.  
  1449.  -fsigned-char 
  1450.            Let the type char be signed, like signed char. 
  1451.  
  1452.            Note that this is equivalent to `-fno-unsigned-char', which is the 
  1453.            negative form of `-funsigned-char'.  Likewise, the option 
  1454.            `-fno-signed-char' is equivalent to `-funsigned-char'. 
  1455.  
  1456.  -fsigned-bitfields 
  1457.  -funsigned-bitfields 
  1458.  -fno-signed-bitfields 
  1459.  -fno-unsigned-bitfields 
  1460.            These options control whether a bitfield is signed or unsigned, when 
  1461.            the declaration does not use either signed or unsigned.  By default, 
  1462.            such a bitfield is signed, because this is consistent: the basic 
  1463.            integer types such as int are signed types. 
  1464.  
  1465.            However, when `-traditional' is used, bitfields are all unsigned no 
  1466.            matter what. 
  1467.  
  1468.  -fwritable-strings 
  1469.            Store string constants in the writable data segment and don't 
  1470.            uniquize them.  This is for compatibility with old programs which 
  1471.            assume they can write into string constants.  The option 
  1472.            `-traditional' also has this effect. 
  1473.  
  1474.            Writing into string constants is a very bad idea; ``constants'' 
  1475.            should be constant. 
  1476.  
  1477.  -fallow-single-precision 
  1478.            Do not promote single precision math operations to double precision, 
  1479.            even when compiling with `-traditional'. 
  1480.  
  1481.            Traditional K&R C promotes all floating point operations to double 
  1482.            precision, regardless of the sizes of the operands.  On the 
  1483.            architecture for which you are compiling, single precision may be 
  1484.            faster than double precision.  If you must use `-traditional', but 
  1485.            want to use single precision operations when the operands are single 
  1486.            precision, use this option.  This option has no effect when 
  1487.            compiling with ANSI or GNU C conventions (the default). 
  1488.  
  1489.  
  1490. ΓòÉΓòÉΓòÉ 8.5. Options Controlling C++ Dialect ΓòÉΓòÉΓòÉ
  1491.  
  1492. This section describes the command-line options that are only meaningful for 
  1493. C++ programs; but you can also use most of the GNU compiler options regardless 
  1494. of what language your program is in.  For example, you might compile a file 
  1495. firstClass.C like this: 
  1496.  
  1497. g++ -g -felide-constructors -O -c firstClass.C
  1498.  
  1499. In this example, only `-felide-constructors' is an option meant only for C++ 
  1500. programs; you can use the other options with any language supported by GNU CC. 
  1501.  
  1502. Here is a list of options that are only for compiling C++ programs: 
  1503.  
  1504.  -fno-access-control 
  1505.            Turn off all access checking.  This switch is mainly useful for 
  1506.            working around bugs in the access control code. 
  1507.  
  1508.  -fall-virtual 
  1509.            Treat all possible member functions as virtual, implicitly. All 
  1510.            member functions (except for constructor functions and new or delete 
  1511.            member operators) are treated as virtual functions of the class 
  1512.            where they appear. 
  1513.  
  1514.            This does not mean that all calls to these member functions will be 
  1515.            made through the internal table of virtual functions.  Under some 
  1516.            circumstances, the compiler can determine that a call to a given 
  1517.            virtual function can be made directly; in these cases the calls are 
  1518.            direct in any case. 
  1519.  
  1520.  -fcheck-new 
  1521.            Check that the pointer returned by operator new is non-null before 
  1522.            attempting to modify the storage allocated.  The current Working 
  1523.            Paper requires that operator new never return a null pointer, so 
  1524.            this check is normally unnecessary. 
  1525.  
  1526.  -fconserve-space 
  1527.            Put uninitialized or runtime-initialized global variables into the 
  1528.            common segment, as C does.  This saves space in the executable at 
  1529.            the cost of not diagnosing duplicate definitions.  If you compile 
  1530.            with this flag and your program mysteriously crashes after main() 
  1531.            has completed, you may have an object that is being destroyed twice 
  1532.            because two definitions were merged. 
  1533.  
  1534.  -fdollars-in-identifiers 
  1535.            Accept `$' in identifiers.  You can also explicitly prohibit use of 
  1536.            `$' with the option `-fno-dollars-in-identifiers'.  (GNU C++ allows 
  1537.            `$' by default on some target systems but not others.) Traditional C 
  1538.            allowed the character `$' to form part of identifiers.  However, 
  1539.            ANSI C and C++ forbid `$' in identifiers. 
  1540.  
  1541.  -fenum-int-equiv 
  1542.            Anachronistically permit implicit conversion of int to enumeration 
  1543.            types.  Current C++ allows conversion of enum to int, but not the 
  1544.            other way around. 
  1545.  
  1546.  -fexternal-templates 
  1547.            Cause template instantiations to obey `#pragma interface' and 
  1548.            `implementation'; template instances are emitted or not according to 
  1549.            the location of the template definition. See Template Instantiation, 
  1550.            for more information. 
  1551.  
  1552.  -falt-external-templates 
  1553.            Similar to -fexternal-templates, but template instances are emitted 
  1554.            or not according to the place where they are first instantiated. See 
  1555.            Template Instantiation, for more information. 
  1556.  
  1557.  - ffor-scope 
  1558.  
  1559.  -fno-for-scope 
  1560.            If -ffor-scope is specified, the scope of variables declared in a 
  1561.            for-init-statement is limited to the `for' loop itself, as specified 
  1562.            by the draft C++ standard. If -fno-for-scope is specified, the scope 
  1563.            of variables declared in a for-init-statement extends to the end of 
  1564.            the enclosing scope, as was the case in old versions of gcc, and 
  1565.            other (traditional) implementations of C++. 
  1566.  
  1567.            The default if neither flag is given to follow the standard, but to 
  1568.            allow and give a warning for old-style code that would otherwise be 
  1569.            invalid, or have different behavior. 
  1570.  
  1571.  -fno-gnu-keywords 
  1572.            Do not recognize classof, headof, signature, sigof or typeof as a 
  1573.            keyword, so that code can use these words as identifiers.  You can 
  1574.            use the keywords __classof__, __headof__, __signature__, __sigof__, 
  1575.            and __typeof__ instead.  `-ansi' implies `-fno-gnu-keywords'. 
  1576.  
  1577.  -fno-implicit-templates 
  1578.            Never emit code for templates which are instantiated implicitly 
  1579.            (i.e. by use); only emit code for explicit instantiations. See 
  1580.            Template Instantiation, for more information. 
  1581.  
  1582.  -fhandle-signatures 
  1583.            Recognize the signature and sigof keywords for specifying abstract 
  1584.            types.  The default (`-fno-handle-signatures') is not to recognize 
  1585.            them. See C++ Signatures. 
  1586.  
  1587.  -fhuge-objects 
  1588.            Support virtual function calls for objects that exceed the size 
  1589.            representable by a `short int'.  Users should not use this flag by 
  1590.            default; if you need to use it, the compiler will tell you so.  If 
  1591.            you compile any of your code with this flag, you must compile all of 
  1592.            your code with this flag (including libg++, if you use it). 
  1593.  
  1594.            This flag is not useful when compiling with -fvtable-thunks. 
  1595.  
  1596.  -fno-implement-inlines 
  1597.            To save space, do not emit out-of-line copies of inline functions 
  1598.            controlled by `#pragma implementation'.  This will cause linker 
  1599.            errors if these functions are not inlined everywhere they are 
  1600.            called. 
  1601.  
  1602.  -fmemoize-lookups 
  1603.  -fsave-memoized 
  1604.            Use heuristics to compile faster.  These heuristics are not enabled 
  1605.            by default, since they are only effective for certain input files. 
  1606.            Other input files compile more slowly. 
  1607.  
  1608.            The first time the compiler must build a call to a member function 
  1609.            (or reference to a data member), it must (1) determine whether the 
  1610.            class implements member functions of that name; (2) resolve which 
  1611.            member function to call (which involves figuring out what sorts of 
  1612.            type conversions need to be made); and (3) check the visibility of 
  1613.            the member function to the caller.  All of this adds up to slower 
  1614.            compilation. Normally, the second time a call is made to that member 
  1615.            function (or reference to that data member), it must go through the 
  1616.            same lengthy process again.  This means that code like this: 
  1617.  
  1618.                       cout << "This " << p << " has " << n << " legs.\n";
  1619.  
  1620.            makes six passes through all three steps.  By using a software 
  1621.            cache, a ``hit'' significantly reduces this cost.  Unfortunately, 
  1622.            using the cache introduces another layer of mechanisms which must be 
  1623.            implemented, and so incurs its own overhead.  `-fmemoize-lookups' 
  1624.            enables the software cache. 
  1625.  
  1626.            Because access privileges (visibility) to members and member 
  1627.            functions may differ from one function context to the next, G++ may 
  1628.            need to flush the cache.  With the `-fmemoize-lookups' flag, the 
  1629.            cache is flushed after every function that is compiled.  The 
  1630.            `-fsave-memoized' flag enables the same software cache, but when the 
  1631.            compiler determines that the context of the last function compiled 
  1632.            would yield the same access privileges of the next function to 
  1633.            compile, it preserves the cache. This is most helpful when defining 
  1634.            many member functions for the same class: with the exception of 
  1635.            member functions which are friends of other classes, each member 
  1636.            function has exactly the same access privileges as every other, and 
  1637.            the cache need not be flushed. 
  1638.  
  1639.            The code that implements these flags has rotted; you should probably 
  1640.            avoid using them. 
  1641.  
  1642.  -fstrict-prototype 
  1643.            Within an `extern "C"' linkage specification, treat a function 
  1644.            declaration with no arguments, such as `int foo ();', as declaring 
  1645.            the function to take no arguments.  Normally, such a declaration 
  1646.            means that the function foo can take any combination of arguments, 
  1647.            as in C.  `-pedantic' implies `-fstrict-prototype' unless overridden 
  1648.            with `-fno-strict-prototype'. 
  1649.  
  1650.            This flag no longer affects declarations with C++ linkage. 
  1651.  
  1652.  -fno-nonnull-objects 
  1653.            Don't assume that a reference is initialized to refer to a valid 
  1654.            object. Although the current C++ Working Paper prohibits null 
  1655.            references, some old code may rely on them, and you can use 
  1656.            `-fno-nonnull-objects' to turn on checking. 
  1657.  
  1658.            At the moment, the compiler only does this checking for conversions 
  1659.            to virtual base classes. 
  1660.  
  1661.  -foperator-names 
  1662.            Recognize the operator name keywords and, bitand, bitor, compl, not, 
  1663.            or and xor as synonyms for the symbols they refer to.  `-ansi' 
  1664.            implies `-foperator-names'. 
  1665.  
  1666.  -fthis-is-variable 
  1667.            Permit assignment to this.  The incorporation of user-defined free 
  1668.            store management into C++ has made assignment to `this' an 
  1669.            anachronism.  Therefore, by default it is invalid to assign to this 
  1670.            within a class member function; that is, GNU C++ treats `this' in a 
  1671.            member function of class X as a non-lvalue of type `X *'.  However, 
  1672.            for backwards compatibility, you can make it valid with 
  1673.            `-fthis-is-variable'. 
  1674.  
  1675.  -fvtable-thunks 
  1676.            Use `thunks' to implement the virtual function dispatch table 
  1677.            (`vtable').  The traditional (cfront-style) approach to implementing 
  1678.            vtables was to store a pointer to the function and two offsets for 
  1679.            adjusting the `this' pointer at the call site.  Newer 
  1680.            implementations store a single pointer to a `thunk' function which 
  1681.            does any necessary adjustment and then calls the target function. 
  1682.  
  1683.            This option also enables a heuristic for controlling emission of 
  1684.            vtables; if a class has any non-inline virtual functions, the vtable 
  1685.            will be emitted in the translation unit containing the first one of 
  1686.            those. 
  1687.  
  1688.  -nostdinc++ 
  1689.            Do not search for header files in the standard directories specific 
  1690.            to C++, but do still search the other standard directories.  (This 
  1691.            option is used when building libg++.) 
  1692.  
  1693.  -traditional 
  1694.            For C++ programs (in addition to the effects that apply to both C 
  1695.            and C++), this has the same effect as `-fthis-is-variable'. See 
  1696.            Options Controlling C Dialect. 
  1697.  
  1698.  In addition, these optimization, warning, and code generation options have 
  1699.  meanings only for C++ programs: 
  1700.  
  1701.  -fno-default-inline 
  1702.            Do not assume `inline' for functions defined inside a class scope. 
  1703.            See Options That Control Optimization. 
  1704.  
  1705.  -Wenum-clash 
  1706.  -Woverloaded-virtual 
  1707.  -Wtemplate-debugging 
  1708.            Warnings that apply only to C++ programs. See Options to Request or 
  1709.            Suppress Warnings. 
  1710.  
  1711.  +en 
  1712.            Control how virtual function definitions are used, in a fashion 
  1713.            compatible with cfront 1.x. See Options for Code Generation 
  1714.            Conventions. 
  1715.  
  1716.  
  1717. ΓòÉΓòÉΓòÉ 8.6. Options to Request or Suppress Warnings ΓòÉΓòÉΓòÉ
  1718.  
  1719. Warnings are diagnostic messages that report constructions which are not 
  1720. inherently erroneous but which are risky or suggest there may have been an 
  1721. error. 
  1722.  
  1723. You can request many specific warnings with options beginning `-W', for example 
  1724. `-Wimplicit' to request warnings on implicit declarations.  Each of these 
  1725. specific warning options also has a negative form beginning `-Wno-' to turn off 
  1726. warnings; for example, `-Wno-implicit'.  This manual lists only one of the two 
  1727. forms, whichever is not the default. 
  1728.  
  1729. These options control the amount and kinds of warnings produced by GNU CC: 
  1730.  
  1731.  -fsyntax-only 
  1732.            Check the code for syntax errors, but don't do anything beyond that. 
  1733.  
  1734.  -pedantic 
  1735.            Issue all the warnings demanded by strict ANSI standard C; reject 
  1736.            all programs that use forbidden extensions. 
  1737.  
  1738.            Valid ANSI standard C programs should compile properly with or 
  1739.            without this option (though a rare few will require `-ansi'). 
  1740.            However, without this option, certain GNU extensions and traditional 
  1741.            C features are supported as well.  With this option, they are 
  1742.            rejected. 
  1743.  
  1744.            `-pedantic' does not cause warning messages for use of the alternate 
  1745.            keywords whose names begin and end with `__'.  Pedantic warnings are 
  1746.            also disabled in the expression that follows __extension__. 
  1747.            However, only system header files should use these escape routes; 
  1748.            application programs should avoid them. See Alternate Keywords. 
  1749.  
  1750.            This option is not intended to be useful; it exists only to satisfy 
  1751.            pedants who would otherwise claim that GNU CC fails to support the 
  1752.            ANSI standard. 
  1753.  
  1754.            Some users try to use `-pedantic' to check programs for strict ANSI 
  1755.            C conformance.  They soon find that it does not do quite what they 
  1756.            want: it finds some non-ANSI practices, but not all---only those for 
  1757.            which ANSI C requires a diagnostic. 
  1758.  
  1759.            A feature to report any failure to conform to ANSI C might be useful 
  1760.            in some instances, but would require considerable additional work 
  1761.            and would be quite different from `-pedantic'.  We recommend, 
  1762.            rather, that users take advantage of the extensions of GNU C and 
  1763.            disregard the limitations of other compilers.  Aside from certain 
  1764.            supercomputers and obsolete small machines, there is less and less 
  1765.            reason ever to use any other C compiler other than for bootstrapping 
  1766.            GNU CC. 
  1767.  
  1768.  -pedantic-errors 
  1769.            Like `-pedantic', except that errors are produced rather than 
  1770.            warnings. 
  1771.  
  1772.  -w 
  1773.            Inhibit all warning messages. 
  1774.  
  1775.  -Wno-import 
  1776.            Inhibit warning messages about the use of `#import'. 
  1777.  
  1778.  -Wchar-subscripts 
  1779.            Warn if an array subscript has type char.  This is a common cause of 
  1780.            error, as programmers often forget that this type is signed on some 
  1781.            machines. 
  1782.  
  1783.  -Wcomment 
  1784.            Warn whenever a comment-start sequence `/*' appears in a comment. 
  1785.  
  1786.  -Wformat 
  1787.            Check calls to printf and scanf, etc., to make sure that the 
  1788.            arguments supplied have types appropriate to the format string 
  1789.            specified. 
  1790.  
  1791.  -Wimplicit 
  1792.            Warn whenever a function or parameter is implicitly declared. 
  1793.  
  1794.  -Wparentheses 
  1795.            Warn if parentheses are omitted in certain contexts, such as when 
  1796.            there is an assignment in a context where a truth value is expected, 
  1797.            or when operators are nested whose precedence people often get 
  1798.            confused about. 
  1799.  
  1800.  -Wreturn-type 
  1801.            Warn whenever a function is defined with a return-type that defaults 
  1802.            to int.  Also warn about any return statement with no return-value 
  1803.            in a function whose return-type is not void. 
  1804.  
  1805.  -Wswitch 
  1806.            Warn whenever a switch statement has an index of enumeral type and 
  1807.            lacks a case for one or more of the named codes of that enumeration. 
  1808.            (The presence of a default label prevents this warning.)  case 
  1809.            labels outside the enumeration range also provoke warnings when this 
  1810.            option is used. 
  1811.  
  1812.  -Wtrigraphs 
  1813.            Warn if any trigraphs are encountered (assuming they are enabled). 
  1814.  
  1815.  -Wunused 
  1816.            Warn whenever a variable is unused aside from its declaration, 
  1817.            whenever a function is declared static but never defined, whenever a 
  1818.            label is declared but not used, and whenever a statement computes a 
  1819.            result that is explicitly not used. 
  1820.  
  1821.            To suppress this warning for an expression, simply cast it to void. 
  1822.            For unused variables and parameters, use the `unused' attribute (see 
  1823.            Variable Attributes). 
  1824.  
  1825.  -Wuninitialized 
  1826.            An automatic variable is used without first being initialized. 
  1827.  
  1828.            These warnings are possible only in optimizing compilation, because 
  1829.            they require data flow information that is computed only when 
  1830.            optimizing.  If you don't specify `-O', you simply won't get these 
  1831.            warnings. 
  1832.  
  1833.            These warnings occur only for variables that are candidates for 
  1834.            register allocation.  Therefore, they do not occur for a variable 
  1835.            that is declared volatile, or whose address is taken, or whose size 
  1836.            is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for 
  1837.            structures, unions or arrays, even when they are in registers. 
  1838.  
  1839.            Note that there may be no warning about a variable that is used only 
  1840.            to compute a value that itself is never used, because such 
  1841.            computations may be deleted by data flow analysis before the 
  1842.            warnings are printed. 
  1843.  
  1844.            These warnings are made optional because GNU CC is not smart enough 
  1845.            to see all the reasons why the code might be correct despite 
  1846.            appearing to have an error.  Here is one example of how this can 
  1847.            happen: 
  1848.  
  1849.                       {
  1850.                         int x;
  1851.                         switch (y)
  1852.                           {
  1853.                           case 1: x = 1;
  1854.                             break;
  1855.                           case 2: x = 4;
  1856.                             break;
  1857.                           case 3: x = 5;
  1858.                           }
  1859.                         foo (x);
  1860.                       }
  1861.  
  1862.            If the value of y is always 1, 2 or 3, then x is always initialized, 
  1863.            but GNU CC doesn't know this.  Here is another common case: 
  1864.  
  1865.                       {
  1866.                         int save_y;
  1867.                         if (change_y) save_y = y, y = new_y;
  1868.                         ...
  1869.                         if (change_y) y = save_y;
  1870.                       }
  1871.  
  1872.            This has no bug because save_y is used only if it is set. 
  1873.  
  1874.            Some spurious warnings can be avoided if you declare all the 
  1875.            functions you use that never return as noreturn. See Function 
  1876.            Attributes. 
  1877.  
  1878.  -Wenum-clash 
  1879.            Warn about conversion between different enumeration types. (C++ 
  1880.            only). 
  1881.  
  1882.  -Wreorder (C++ only) 
  1883.            Warn when the order of member initializers given in the code does 
  1884.            not match the order in which they must be executed.  For instance: 
  1885.  
  1886.                       struct A {
  1887.                         int i;
  1888.                         int j;
  1889.                         A(): j (0), i (1) { }
  1890.                       };
  1891.  
  1892.            Here the compiler will warn that the member initializers for `i' and 
  1893.            `j' will be rearranged to match the declaration order of the 
  1894.            members. 
  1895.  
  1896.  -Wtemplate-debugging 
  1897.            When using templates in a C++ program, warn if debugging is not yet 
  1898.            fully available (C++ only). 
  1899.  
  1900.  -Wall 
  1901.            All of the above `-W' options combined.  These are all the options 
  1902.            which pertain to usage that we recommend avoiding and that we 
  1903.            believe is easy to avoid, even in conjunction with macros. 
  1904.  
  1905.  The remaining `-W...' options are not implied by `-Wall' because they warn 
  1906.  about constructions that we consider reasonable to use, on occasion, in clean 
  1907.  programs. 
  1908.  
  1909.  -W 
  1910.            Print extra warning messages for these events: 
  1911.  
  1912.                A nonvolatile automatic variable might be changed by a call to 
  1913.                 longjmp.  These warnings as well are possible only in 
  1914.                 optimizing compilation. 
  1915.  
  1916.                 The compiler sees only the calls to setjmp.  It cannot know 
  1917.                 where longjmp will be called; in fact, a signal handler could 
  1918.                 call it at any point in the code.  As a result, you may get a 
  1919.                 warning even when there is in fact no problem because longjmp 
  1920.                 cannot in fact be called at the place which would cause a 
  1921.                 problem. 
  1922.  
  1923.                A function can return either with or without a value.  (Falling 
  1924.                 off the end of the function body is considered returning 
  1925.                 without a value.)  For example, this function would evoke such 
  1926.                 a warning: 
  1927.  
  1928.                                 foo (a)
  1929.                                 {
  1930.                                   if (a > 0)
  1931.                                     return a;
  1932.                                 }
  1933.  
  1934.                An expression-statement or the left-hand side of a comma 
  1935.                 expression contains no side effects. To suppress the warning, 
  1936.                 cast the unused expression to void. For example, an expression 
  1937.                 such as `x[i,j]' will cause a warning, but `x[(void)i,j]' will 
  1938.                 not. 
  1939.  
  1940.                An unsigned value is compared against zero with `<' or `<='. 
  1941.  
  1942.                A comparison like `x<=y<=z' appears; this is equivalent to 
  1943.                 `(x<=y ? 1 : 0) <= z', which is a different interpretation from 
  1944.                 that of ordinary mathematical notation. 
  1945.  
  1946.                Storage-class specifiers like static are not the first things 
  1947.                 in a declaration.  According to the C Standard, this usage is 
  1948.                 obsolescent. 
  1949.  
  1950.                If `-Wall' or `-Wunused' is also specified, warn about unused 
  1951.                 arguments. 
  1952.  
  1953.                An aggregate has a partly bracketed initializer. For example, 
  1954.                 the following code would evoke such a warning, because braces 
  1955.                 are missing around the initializer for x.h: 
  1956.  
  1957.                                 struct s { int f, g; };
  1958.                                 struct t { struct s h; int i; };
  1959.                                 struct t x = { 1, 2, 3 };
  1960.  
  1961.  -Wtraditional 
  1962.            Warn about certain constructs that behave differently in traditional 
  1963.            and ANSI C. 
  1964.  
  1965.                Macro arguments occurring within string constants in the macro 
  1966.                 body. These would substitute the argument in traditional C, but 
  1967.                 are part of the constant in ANSI C. 
  1968.  
  1969.                A function declared external in one block and then used after 
  1970.                 the end of the block. 
  1971.  
  1972.                A switch statement has an operand of type long. 
  1973.  
  1974.  -Wshadow 
  1975.            Warn whenever a local variable shadows another local variable. 
  1976.  
  1977.  -Wid-clash-len 
  1978.            Warn whenever two distinct identifiers match in the first len 
  1979.            characters.  This may help you prepare a program that will compile 
  1980.            with certain obsolete, brain-damaged compilers. 
  1981.  
  1982.  -Wlarger-than-len 
  1983.            Warn whenever an object of larger than len bytes is defined. 
  1984.  
  1985.  -Wpointer-arith 
  1986.            Warn about anything that depends on the ``size of'' a function type 
  1987.            or of void.  GNU C assigns these types a size of 1, for convenience 
  1988.            in calculations with void * pointers and pointers to functions. 
  1989.  
  1990.  -Wbad-function-cast 
  1991.            Warn whenever a function call is cast to a non-matching type. For 
  1992.            example, warn if int malloc() is cast to anything *. 
  1993.  
  1994.  -Wcast-qual 
  1995.            Warn whenever a pointer is cast so as to remove a type qualifier 
  1996.            from the target type.  For example, warn if a const char * is cast 
  1997.            to an ordinary char *. 
  1998.  
  1999.  -Wcast-align 
  2000.            Warn whenever a pointer is cast such that the required alignment of 
  2001.            the target is increased.  For example, warn if a char * is cast to 
  2002.            an int * on machines where integers can only be accessed at two- or 
  2003.            four-byte boundaries. 
  2004.  
  2005.  -Wwrite-strings 
  2006.            Give string constants the type const char[length] so that copying 
  2007.            the address of one into a non-const char * pointer will get a 
  2008.            warning.  These warnings will help you find at compile time code 
  2009.            that can try to write into a string constant, but only if you have 
  2010.            been very careful about using const in declarations and prototypes. 
  2011.            Otherwise, it will just be a nuisance; this is why we did not make 
  2012.            `-Wall' request these warnings. 
  2013.  
  2014.  -Wconversion 
  2015.            Warn if a prototype causes a type conversion that is different from 
  2016.            what would happen to the same argument in the absence of a 
  2017.            prototype.  This includes conversions of fixed point to floating and 
  2018.            vice versa, and conversions changing the width or signedness of a 
  2019.            fixed point argument except when the same as the default promotion. 
  2020.  
  2021.            Also, warn if a negative integer constant expression is implicitly 
  2022.            converted to an unsigned type.  For example, warn about the 
  2023.            assignment x = -1 if x is unsigned.  But do not warn about explicit 
  2024.            casts like (unsigned) -1. 
  2025.  
  2026.  -Waggregate-return 
  2027.            Warn if any functions that return structures or unions are defined 
  2028.            or called.  (In languages where you can return an array, this also 
  2029.            elicits a warning.) 
  2030.  
  2031.  -Wstrict-prototypes 
  2032.            Warn if a function is declared or defined without specifying the 
  2033.            argument types.  (An old-style function definition is permitted 
  2034.            without a warning if preceded by a declaration which specifies the 
  2035.            argument types.) 
  2036.  
  2037.  -Wmissing-prototypes 
  2038.            Warn if a global function is defined without a previous prototype 
  2039.            declaration.  This warning is issued even if the definition itself 
  2040.            provides a prototype.  The aim is to detect global functions that 
  2041.            fail to be declared in header files. 
  2042.  
  2043.  -Wmissing-declarations 
  2044.            Warn if a global function is defined without a previous declaration. 
  2045.            Do so even if the definition itself provides a prototype. Use this 
  2046.            option to detect global functions that are not declared in header 
  2047.            files. 
  2048.  
  2049.  -Wredundant-decls 
  2050.            Warn if anything is declared more than once in the same scope, even 
  2051.            in cases where multiple declaration is valid and changes nothing. 
  2052.  
  2053.  -Wnested-externs 
  2054.            Warn if an extern declaration is encountered within an function. 
  2055.  
  2056.  -Winline 
  2057.            Warn if a function can not be inlined, and either it was declared as 
  2058.            inline, or else the `-finline-functions' option was given. 
  2059.  
  2060.  -Woverloaded-virtual 
  2061.            Warn when a derived class function declaration may be an error in 
  2062.            defining a virtual function (C++ only).  In a derived class, the 
  2063.            definitions of virtual functions must match the type signature of a 
  2064.            virtual function declared in the base class.  With this option, the 
  2065.            compiler warns when you define a function with the same name as a 
  2066.            virtual function, but with a type signature that does not match any 
  2067.            declarations from the base class. 
  2068.  
  2069.  -Wsynth (C++ only) 
  2070.            Warn when g++'s synthesis behavior does not match that of cfront. 
  2071.            For instance: 
  2072.  
  2073.                       struct A {
  2074.                         operator int ();
  2075.                         A& operator = (int);
  2076.                       };
  2077.  
  2078.                       main ()
  2079.                       {
  2080.                         A a,b;
  2081.                         a = b;
  2082.                       }
  2083.  
  2084.            In this example, g++ will synthesize a default `A& operator = (const 
  2085.            A&);', while cfront will use the user-defined `operator ='. 
  2086.  
  2087.  -Werror 
  2088.            Make all warnings into errors. 
  2089.  
  2090.  
  2091. ΓòÉΓòÉΓòÉ 8.7. Options for Debugging Your Program or GNU CC ΓòÉΓòÉΓòÉ
  2092.  
  2093. GNU CC has various special options that are used for debugging either your 
  2094. program or GCC: 
  2095.  
  2096.  -g 
  2097.            Produce debugging information in the operating system's native 
  2098.            format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this 
  2099.            debugging information. 
  2100.  
  2101.            On most systems that use stabs format, `-g' enables use of extra 
  2102.            debugging information that only GDB can use; this extra information 
  2103.            makes debugging work better in GDB but will probably make other 
  2104.            debuggers crash or refuse to read the program.  If you want to 
  2105.            control for certain whether to generate the extra information, use 
  2106.            `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf+', or 
  2107.            `-gdwarf' (see below). 
  2108.  
  2109.            Unlike most other C compilers, GNU CC allows you to use `-g' with 
  2110.            `-O'.  The shortcuts taken by optimized code may occasionally 
  2111.            produce surprising results: some variables you declared may not 
  2112.            exist at all; flow of control may briefly move where you did not 
  2113.            expect it; some statements may not be executed because they compute 
  2114.            constant results or their values were already at hand; some 
  2115.            statements may execute in different places because they were moved 
  2116.            out of loops. 
  2117.  
  2118.            Nevertheless it proves possible to debug optimized output.  This 
  2119.            makes it reasonable to use the optimizer for programs that might 
  2120.            have bugs. 
  2121.  
  2122.            The following options are useful when GNU CC is generated with the 
  2123.            capability for more than one debugging format. 
  2124.  
  2125.  -ggdb 
  2126.            Produce debugging information in the native format (if that is 
  2127.            supported), including GDB extensions if at all possible. 
  2128.  
  2129.  -gstabs 
  2130.            Produce debugging information in stabs format (if that is 
  2131.            supported), without GDB extensions.  This is the format used by DBX 
  2132.            on most BSD systems.  On MIPS, Alpha and System V Release 4 systems 
  2133.            this option produces stabs debugging output which is not understood 
  2134.            by DBX or SDB. On System V Release 4 systems this option requires 
  2135.            the GNU assembler. 
  2136.  
  2137.  -gstabs+ 
  2138.            Produce debugging information in stabs format (if that is 
  2139.            supported), using GNU extensions understood only by the GNU debugger 
  2140.            (GDB).  The use of these extensions is likely to make other 
  2141.            debuggers crash or refuse to read the program. 
  2142.  
  2143.  -gcoff 
  2144.            Produce debugging information in COFF format (if that is supported). 
  2145.            This is the format used by SDB on most System V systems prior to 
  2146.            System V Release 4. 
  2147.  
  2148.  -gxcoff 
  2149.            Produce debugging information in XCOFF format (if that is 
  2150.            supported). This is the format used by the DBX debugger on IBM 
  2151.            RS/6000 systems. 
  2152.  
  2153.  -gxcoff+ 
  2154.            Produce debugging information in XCOFF format (if that is 
  2155.            supported), using GNU extensions understood only by the GNU debugger 
  2156.            (GDB).  The use of these extensions is likely to make other 
  2157.            debuggers crash or refuse to read the program, and may cause 
  2158.            assemblers other than the GNU assembler (GAS) to fail with an error. 
  2159.  
  2160.  -gdwarf 
  2161.            Produce debugging information in DWARF format (if that is 
  2162.            supported). This is the format used by SDB on most System V Release 
  2163.            4 systems. 
  2164.  
  2165.  -gdwarf+ 
  2166.            Produce debugging information in DWARF format (if that is 
  2167.            supported), using GNU extensions understood only by the GNU debugger 
  2168.            (GDB).  The use of these extensions is likely to make other 
  2169.            debuggers crash or refuse to read the program. 
  2170.  
  2171.  -glevel 
  2172.  -ggdblevel 
  2173.  -gstabslevel 
  2174.  -gcofflevel 
  2175.  -gxcofflevel 
  2176.  -gdwarflevel 
  2177.            Request debugging information and also use level to specify how much 
  2178.            information.  The default level is 2. 
  2179.  
  2180.            Level 1 produces minimal information, enough for making backtraces 
  2181.            in parts of the program that you don't plan to debug.  This includes 
  2182.            descriptions of functions and external variables, but no information 
  2183.            about local variables and no line numbers. 
  2184.  
  2185.            Level 3 includes extra information, such as all the macro 
  2186.            definitions present in the program.  Some debuggers support macro 
  2187.            expansion when you use `-g3'. 
  2188.  
  2189.  -p 
  2190.            Generate extra code to write profile information suitable for the 
  2191.            analysis program prof.  You must use this option when compiling the 
  2192.            source files you want data about, and you must also use it when 
  2193.            linking. 
  2194.  
  2195.  -pg 
  2196.            Generate extra code to write profile information suitable for the 
  2197.            analysis program gprof.  You must use this option when compiling the 
  2198.            source files you want data about, and you must also use it when 
  2199.            linking. 
  2200.  
  2201.  -a 
  2202.            Generate extra code to write profile information for basic blocks, 
  2203.            which will record the number of times each basic block is executed, 
  2204.            the basic block start address, and the function name containing the 
  2205.            basic block.  If `-g' is used, the line number and filename of the 
  2206.            start of the basic block will also be recorded.  If not overridden 
  2207.            by the machine description, the default action is to append to the 
  2208.            text file `bb.out'. 
  2209.  
  2210.            This data could be analyzed by a program like tcov.  Note, however, 
  2211.            that the format of the data is not what tcov expects. Eventually GNU 
  2212.            gprof should be extended to process this data. 
  2213.  
  2214.  -fbounds-checking 
  2215.            Add extra code to check array bounds and pointers at run time. See 
  2216.            See Bounds Checking. This option only works with C. 
  2217.  
  2218.  -dletters 
  2219.            Says to make debugging dumps during compilation at times specified 
  2220.            by letters.  This is used for debugging the compiler.  The file 
  2221.            names for most of the dumps are made by appending a word to the 
  2222.            source file name (e.g.  `foo.c.rtl' or `foo.c.jump').  Here are the 
  2223.            possible letters for use in letters, and their meanings: 
  2224.  
  2225.            `M' 
  2226.                           Dump all macro definitions, at the end of 
  2227.                           preprocessing, and write no output. 
  2228.  
  2229.            `N' 
  2230.                           Dump all macro names, at the end of preprocessing. 
  2231.  
  2232.            `D' 
  2233.                           Dump all macro definitions, at the end of 
  2234.                           preprocessing, in addition to normal output. 
  2235.  
  2236.            `y' 
  2237.                           Dump debugging information during parsing, to 
  2238.                           standard error. 
  2239.  
  2240.            `r' 
  2241.                           Dump after RTL generation, to `file.rtl'. 
  2242.  
  2243.            `x' 
  2244.                           Just generate RTL for a function instead of compiling 
  2245.                           it.  Usually used with `r'. 
  2246.  
  2247.            `j' 
  2248.                           Dump after first jump optimization, to `file.jump'. 
  2249.  
  2250.            `s' 
  2251.                           Dump after CSE (including the jump optimization that 
  2252.                           sometimes follows CSE), to `file.cse'. 
  2253.  
  2254.            `L' 
  2255.                           Dump after loop optimization, to `file.loop'. 
  2256.  
  2257.            `t' 
  2258.                           Dump after the second CSE pass (including the jump 
  2259.                           optimization that sometimes follows CSE), to 
  2260.                           `file.cse2'. 
  2261.  
  2262.            `f' 
  2263.                           Dump after flow analysis, to `file.flow'. 
  2264.  
  2265.            `c' 
  2266.                           Dump after instruction combination, to the file 
  2267.                           `file.combine'. 
  2268.  
  2269.            `S' 
  2270.                           Dump after the first instruction scheduling pass, to 
  2271.                           `file.sched'. 
  2272.  
  2273.            `l' 
  2274.                           Dump after local register allocation, to `file.lreg'. 
  2275.  
  2276.            `g' 
  2277.                           Dump after global register allocation, to 
  2278.                           `file.greg'. 
  2279.  
  2280.            `R' 
  2281.                           Dump after the second instruction scheduling pass, to 
  2282.                           `file.sched2'. 
  2283.  
  2284.            `J' 
  2285.                           Dump after last jump optimization, to `file.jump2'. 
  2286.  
  2287.            `d' 
  2288.                           Dump after delayed branch scheduling, to `file.dbr'. 
  2289.  
  2290.            `k' 
  2291.                           Dump after conversion from registers to stack, to 
  2292.                           `file.stack'. 
  2293.  
  2294.            `a' 
  2295.                           Produce all the dumps listed above. 
  2296.  
  2297.            `m' 
  2298.                           Print statistics on memory usage, at the end of the 
  2299.                           run, to standard error. 
  2300.  
  2301.            `p' 
  2302.                           Annotate the assembler output with a comment 
  2303.                           indicating which pattern and alternative was used. 
  2304.  
  2305.  -fpretend-float 
  2306.            When running a cross-compiler, pretend that the target machine uses 
  2307.            the same floating point format as the host machine.  This causes 
  2308.            incorrect output of the actual floating constants, but the actual 
  2309.            instruction sequence will probably be the same as GNU CC would make 
  2310.            when running on the target machine. 
  2311.  
  2312.  -save-temps 
  2313.            Store the usual ``temporary'' intermediate files permanently; place 
  2314.            them in the current directory and name them based on the source 
  2315.            file.  Thus, compiling `foo.c' with `-c -save-temps' would produce 
  2316.            files `foo.i' and `foo.s', as well as `foo.o'. 
  2317.  
  2318.  -print-file-name=library 
  2319.            Print the full absolute name of the library file library that would 
  2320.            be used when linking---and don't do anything else.  With this 
  2321.            option, GNU CC does not compile or link anything; it just prints the 
  2322.            file name. 
  2323.  
  2324.  -print-prog-name=program 
  2325.            Like `-print-file-name', but searches for a program such as `cpp'. 
  2326.  
  2327.  -print-libgcc-file-name 
  2328.            Same as `-print-file-name=libgcc.a'. 
  2329.  
  2330.            This is useful when you use `-nostdlib' or `-nodefaultlibs' but you 
  2331.            do want to link with `libgcc.a'.  You can do 
  2332.  
  2333.                       gcc -nostdlib files... `gcc -print-libgcc-file-name`
  2334.  
  2335.  -print-search-dirs 
  2336.            Print the name of the configured installation directory and a list 
  2337.            of program and library directories gcc will search---and don't do 
  2338.            anything else. 
  2339.  
  2340.            This is useful when gcc prints the error message `installation 
  2341.            problem, cannot exec cpp: No such file or directory'. To resolve 
  2342.            this you either need to put `cpp' and the other compiler components 
  2343.            where gcc expects to find them, or you can set the environment 
  2344.            variable GCC_EXEC_PREFIX to the directory where you installed them. 
  2345.            Don't forget the trailing '/'. See Environment Variables. 
  2346.  
  2347.  
  2348. ΓòÉΓòÉΓòÉ 8.8. Options That Control Optimization ΓòÉΓòÉΓòÉ
  2349.  
  2350. These options control various sorts of optimizations: 
  2351.  
  2352.  -O 
  2353.  -O1 
  2354.            Optimize.  Optimizing compilation takes somewhat more time, and a 
  2355.            lot more memory for a large function. 
  2356.  
  2357.            Without `-O', the compiler's goal is to reduce the cost of 
  2358.            compilation and to make debugging produce the expected results. 
  2359.            Statements are independent: if you stop the program with a 
  2360.            breakpoint between statements, you can then assign a new value to 
  2361.            any variable or change the program counter to any other statement in 
  2362.            the function and get exactly the results you would expect from the 
  2363.            source code. 
  2364.  
  2365.            Without `-O', the compiler only allocates variables declared 
  2366.            register in registers.  The resulting compiled code is a little 
  2367.            worse than produced by PCC without `-O'. 
  2368.  
  2369.            With `-O', the compiler tries to reduce code size and execution 
  2370.            time. 
  2371.  
  2372.            When you specify `-O', the compiler turns on `-fthread-jumps' and 
  2373.            `-fdefer-pop' on all machines.  The compiler turns on 
  2374.            `-fdelayed-branch' on machines that have delay slots, and 
  2375.            `-fomit-frame-pointer' on machines that can support debugging even 
  2376.            without a frame pointer.  On some machines the compiler also turns 
  2377.            on other flags. 
  2378.  
  2379.  -O2 
  2380.            Optimize even more.  GNU CC performs nearly all supported 
  2381.            optimizations that do not involve a space-speed tradeoff.  The 
  2382.            compiler does not perform loop unrolling or function inlining when 
  2383.            you specify `-O2'. As compared to `-O', this option increases both 
  2384.            compilation time and the performance of the generated code. 
  2385.  
  2386.            `-O2' turns on all optional optimizations except for loop unrolling 
  2387.            and function inlining.  It also turns on the `-fforce-mem' option on 
  2388.            all machines and frame pointer elimination on machines where doing 
  2389.            so does not interfere with debugging. 
  2390.  
  2391.  -O3 
  2392.            Optimize yet more.  `-O3' turns on all optimizations specified by 
  2393.            `-O2' and also turns on the `inline-functions' option. 
  2394.  
  2395.  -O0 
  2396.            Do not optimize. 
  2397.  
  2398.            If you use multiple `-O' options, with or without level numbers, the 
  2399.            last such option is the one that is effective. 
  2400.  
  2401.  Options of the form `-fflag' specify machine-independent flags.  Most flags 
  2402.  have both positive and negative forms; the negative form of `-ffoo' would be 
  2403.  `-fno-foo'.  In the table below, only one of the forms is listed---the one 
  2404.  which is not the default. You can figure out the other form by either removing 
  2405.  `no-' or adding it. 
  2406.  
  2407.  -ffloat-store 
  2408.            Do not store floating point variables in registers, and inhibit 
  2409.            other options that might change whether a floating point value is 
  2410.            taken from a register or memory. 
  2411.  
  2412.            This option prevents undesirable excess precision on machines such 
  2413.            as the 68000 where the floating registers (of the 68881) keep more 
  2414.            precision than a double is supposed to have.  For most programs, the 
  2415.            excess precision does only good, but a few programs rely on the 
  2416.            precise definition of IEEE floating point.  Use `-ffloat-store' for 
  2417.            such programs. 
  2418.  
  2419.  -fno-default-inline 
  2420.            Do not make member functions inline by default merely because they 
  2421.            are defined inside the class scope (C++ only).  Otherwise, when you 
  2422.            specify `-O', member functions defined inside class scope are 
  2423.            compiled inline by default; i.e., you don't need to add `inline' in 
  2424.            front of the member function name. 
  2425.  
  2426.  -fno-defer-pop 
  2427.            Always pop the arguments to each function call as soon as that 
  2428.            function returns.  For machines which must pop arguments after a 
  2429.            function call, the compiler normally lets arguments accumulate on 
  2430.            the stack for several function calls and pops them all at once. 
  2431.  
  2432.  -fforce-mem 
  2433.            Force memory operands to be copied into registers before doing 
  2434.            arithmetic on them.  This produces better code by making all memory 
  2435.            references potential common subexpressions.  When they are not 
  2436.            common subexpressions, instruction combination should eliminate the 
  2437.            separate register-load.  The `-O2' option turns on this option. 
  2438.  
  2439.  -fforce-addr 
  2440.            Force memory address constants to be copied into registers before 
  2441.            doing arithmetic on them.  This may produce better code just as 
  2442.            `-fforce-mem' may. 
  2443.  
  2444.  -fomit-frame-pointer 
  2445.            Don't keep the frame pointer in a register for functions that don't 
  2446.            need one.  This avoids the instructions to save, set up and restore 
  2447.            frame pointers; it also makes an extra register available in many 
  2448.            functions.  *It also makes debugging impossible on some machines.* 
  2449.  
  2450.            On some machines, such as the Vax, this flag has no effect, because 
  2451.            the standard calling sequence automatically handles the frame 
  2452.            pointer and nothing is saved by pretending it doesn't exist.  The 
  2453.            machine-description macro FRAME_POINTER_REQUIRED controls whether a 
  2454.            target machine supports this flag.  See Registers. 
  2455.  
  2456.  -fno-inline 
  2457.            Don't pay attention to the inline keyword.  Normally this option is 
  2458.            used to keep the compiler from expanding any functions inline. Note 
  2459.            that if you are not optimizing, no functions can be expanded inline. 
  2460.  
  2461.  -finline-functions 
  2462.            Integrate all simple functions into their callers.  The compiler 
  2463.            heuristically decides which functions are simple enough to be worth 
  2464.            integrating in this way. 
  2465.  
  2466.            If all calls to a given function are integrated, and the function is 
  2467.            declared static, then the function is normally not output as 
  2468.            assembler code in its own right. 
  2469.  
  2470.  -fkeep-inline-functions 
  2471.            Even if all calls to a given function are integrated, and the 
  2472.            function is declared static, nevertheless output a separate run-time 
  2473.            callable version of the function. 
  2474.  
  2475.  -fno-function-cse 
  2476.            Do not put function addresses in registers; make each instruction 
  2477.            that calls a constant function contain the function's address 
  2478.            explicitly. 
  2479.  
  2480.            This option results in less efficient code, but some strange hacks 
  2481.            that alter the assembler output may be confused by the optimizations 
  2482.            performed when this option is not used. 
  2483.  
  2484.  -ffast-math 
  2485.            This option allows GCC to violate some ANSI or IEEE rules and/or 
  2486.            specifications in the interest of optimizing code for speed.  For 
  2487.            example, it allows the compiler to assume arguments to the sqrt 
  2488.            function are non-negative numbers and that no floating-point values 
  2489.            are NaNs. 
  2490.  
  2491.            This option should never be turned on by any `-O' option since it 
  2492.            can result in incorrect output for programs which depend on an exact 
  2493.            implementation of IEEE or ANSI rules/specifications for math 
  2494.            functions. 
  2495.  
  2496.  The following options control specific optimizations.  The `-O2' option turns 
  2497.  on all of these optimizations except `-funroll-loops' and 
  2498.  `-funroll-all-loops'.  On most machines, the `-O' option turns on the 
  2499.  `-fthread-jumps' and `-fdelayed-branch' options, but specific machines may 
  2500.  handle it differently. 
  2501.  
  2502.  You can use the following flags in the rare cases when ``fine-tuning'' of 
  2503.  optimizations to be performed is desired. 
  2504.  
  2505.  -fstrength-reduce 
  2506.            Perform the optimizations of loop strength reduction and elimination 
  2507.            of iteration variables. 
  2508.  
  2509.  -fthread-jumps 
  2510.            Perform optimizations where we check to see if a jump branches to a 
  2511.            location where another comparison subsumed by the first is found. 
  2512.            If so, the first branch is redirected to either the destination of 
  2513.            the second branch or a point immediately following it, depending on 
  2514.            whether the condition is known to be true or false. 
  2515.  
  2516.  -fcse-follow-jumps 
  2517.            In common subexpression elimination, scan through jump instructions 
  2518.            when the target of the jump is not reached by any other path.  For 
  2519.            example, when CSE encounters an if statement with an else clause, 
  2520.            CSE will follow the jump when the condition tested is false. 
  2521.  
  2522.  -fcse-skip-blocks 
  2523.            This is similar to `-fcse-follow-jumps', but causes CSE to follow 
  2524.            jumps which conditionally skip over blocks.  When CSE encounters a 
  2525.            simple if statement with no else clause, `-fcse-skip-blocks' causes 
  2526.            CSE to follow the jump around the body of the if. 
  2527.  
  2528.  -frerun-cse-after-loop 
  2529.            Re-run common subexpression elimination after loop optimizations has 
  2530.            been performed. 
  2531.  
  2532.  -fexpensive-optimizations 
  2533.            Perform a number of minor optimizations that are relatively 
  2534.            expensive. 
  2535.  
  2536.  -fdelayed-branch 
  2537.            If supported for the target machine, attempt to reorder instructions 
  2538.            to exploit instruction slots available after delayed branch 
  2539.            instructions. 
  2540.  
  2541.  -fschedule-insns 
  2542.            If supported for the target machine, attempt to reorder instructions 
  2543.            to eliminate execution stalls due to required data being 
  2544.            unavailable.  This helps machines that have slow floating point or 
  2545.            memory load instructions by allowing other instructions to be issued 
  2546.            until the result of the load or floating point instruction is 
  2547.            required. 
  2548.  
  2549.  -fschedule-insns2 
  2550.            Similar to `-fschedule-insns', but requests an additional pass of 
  2551.            instruction scheduling after register allocation has been done. 
  2552.            This is especially useful on machines with a relatively small number 
  2553.            of registers and where memory load instructions take more than one 
  2554.            cycle. 
  2555.  
  2556.  -fcaller-saves 
  2557.            Enable values to be allocated in registers that will be clobbered by 
  2558.            function calls, by emitting extra instructions to save and restore 
  2559.            the registers around such calls.  Such allocation is done only when 
  2560.            it seems to result in better code than would otherwise be produced. 
  2561.  
  2562.            This option is enabled by default on certain machines, usually those 
  2563.            which have no call-preserved registers to use instead. 
  2564.  
  2565.  -funroll-loops 
  2566.            Perform the optimization of loop unrolling.  This is only done for 
  2567.            loops whose number of iterations can be determined at compile time 
  2568.            or run time. `-funroll-loop' implies both `-fstrength-reduce' and 
  2569.            `-frerun-cse-after-loop'. 
  2570.  
  2571.  -funroll-all-loops 
  2572.            Perform the optimization of loop unrolling.  This is done for all 
  2573.            loops and usually makes programs run more slowly. 
  2574.            `-funroll-all-loops' implies `-fstrength-reduce' as well as 
  2575.            `-frerun-cse-after-loop'. 
  2576.  
  2577.  -fno-peephole 
  2578.            Disable any machine-specific peephole optimizations. 
  2579.  
  2580.  
  2581. ΓòÉΓòÉΓòÉ 8.9. Options Controlling the Preprocessor ΓòÉΓòÉΓòÉ
  2582.  
  2583. These options control the C preprocessor, which is run on each C source file 
  2584. before actual compilation. 
  2585.  
  2586. If you use the `-E' option, nothing is done except preprocessing. Some of these 
  2587. options make sense only together with `-E' because they cause the preprocessor 
  2588. output to be unsuitable for actual compilation. 
  2589.  
  2590.  -include file 
  2591.            Process file as input before processing the regular input file. In 
  2592.            effect, the contents of file are compiled first.  Any `-D' and `-U' 
  2593.            options on the command line are always processed before `-include 
  2594.            file', regardless of the order in which they are written.  All the 
  2595.            `-include' and `-imacros' options are processed in the order in 
  2596.            which they are written. 
  2597.  
  2598.  -imacros file 
  2599.            Process file as input, discarding the resulting output, before 
  2600.            processing the regular input file.  Because the output generated 
  2601.            from file is discarded, the only effect of `-imacros file' is to 
  2602.            make the macros defined in file available for use in the main input. 
  2603.  
  2604.            Any `-D' and `-U' options on the command line are always processed 
  2605.            before `-imacros file', regardless of the order in which they are 
  2606.            written.  All the `-include' and `-imacros' options are processed in 
  2607.            the order in which they are written. 
  2608.  
  2609.  -idirafter dir 
  2610.            Add the directory dir to the second include path.  The directories 
  2611.            on the second include path are searched when a header file is not 
  2612.            found in any of the directories in the main include path (the one 
  2613.            that `-I' adds to). 
  2614.  
  2615.  -iprefix prefix 
  2616.            Specify prefix as the prefix for subsequent `-iwithprefix' options. 
  2617.  
  2618.  -iwithprefix dir 
  2619.            Add a directory to the second include path.  The directory's name is 
  2620.            made by concatenating prefix and dir, where prefix was specified 
  2621.            previously with `-iprefix'.  If you have not specified a prefix yet, 
  2622.            the directory containing the installed passes of the compiler is 
  2623.            used as the default. 
  2624.  
  2625.  -iwithprefixbefore dir 
  2626.            Add a directory to the main include path.  The directory's name is 
  2627.            made by concatenating prefix and dir, as in the case of 
  2628.            `-iwithprefix'. 
  2629.  
  2630.  -isystem dir 
  2631.            Add a directory to the beginning of the second include path, marking 
  2632.            it as a system directory, so that it gets the same special treatment 
  2633.            as is applied to the standard system directories. 
  2634.  
  2635.  -nostdinc 
  2636.            Do not search the standard system directories for header files. 
  2637.            Only the directories you have specified with `-I' options (and the 
  2638.            current directory, if appropriate) are searched. See Directory 
  2639.            Options, for information on `-I'. 
  2640.  
  2641.            By using both `-nostdinc' and `-I-', you can limit the include-file 
  2642.            search path to only those directories you specify explicitly. 
  2643.  
  2644.  -undef 
  2645.            Do not predefine any nonstandard macros.  (Including architecture 
  2646.            flags). 
  2647.  
  2648.  -E 
  2649.            Run only the C preprocessor.  Preprocess all the C source files 
  2650.            specified and output the results to standard output or to the 
  2651.            specified output file. 
  2652.  
  2653.  -C 
  2654.            Tell the preprocessor not to discard comments.  Used with the `-E' 
  2655.            option. 
  2656.  
  2657.  -P 
  2658.            Tell the preprocessor not to generate `#line' directives. Used with 
  2659.            the `-E' option. 
  2660.  
  2661.  -M 
  2662.            Tell the preprocessor to output a rule suitable for make describing 
  2663.            the dependencies of each object file.  For each source file, the 
  2664.            preprocessor outputs one make-rule whose target is the object file 
  2665.            name for that source file and whose dependencies are all the 
  2666.            #include header files it uses.  This rule may be a single line or 
  2667.            may be continued with `\'-newline if it is long.  The list of rules 
  2668.            is printed on standard output instead of the preprocessed C program. 
  2669.  
  2670.            `-M' implies `-E'. 
  2671.  
  2672.            Another way to specify output of a make rule is by setting the 
  2673.            environment variable DEPENDENCIES_OUTPUT ( see Environment 
  2674.            Variables). 
  2675.  
  2676.  -MM 
  2677.            Like `-M' but the output mentions only the user header files 
  2678.            included with `#include "file"'.  System header files included with 
  2679.            `#include <file>' are omitted. 
  2680.  
  2681.  -MD 
  2682.            Like `-M' but the dependency information is written to a file made 
  2683.            by replacing ".c" with ".d" at the end of the input file names. This 
  2684.            is in addition to compiling the file as specified---`-MD' does not 
  2685.            inhibit ordinary compilation the way `-M' does. 
  2686.  
  2687.            In Mach, you can use the utility md to merge multiple dependency 
  2688.            files into a single dependency file suitable for using with the 
  2689.            `make' command. 
  2690.  
  2691.  -MMD 
  2692.            Like `-MD' except mention only user header files, not system header 
  2693.            files. 
  2694.  
  2695.  -MG 
  2696.            Treat missing header files as generated files and assume they live 
  2697.            in the same directory as the source file.  If you specify `-MG', you 
  2698.            must also specify either `-M' or `-MM'.  `-MG' is not supported with 
  2699.            `-MD' or `-MMD'. 
  2700.  
  2701.  -H 
  2702.            Print the name of each header file used, in addition to other normal 
  2703.            activities. 
  2704.  
  2705.  -Aquestion(answer) 
  2706.            Assert the answer answer for question, in case it is tested with a 
  2707.            preprocessing conditional such as `#if #question(answer)'.  `-A-' 
  2708.            disables the standard assertions that normally describe the target 
  2709.            machine. 
  2710.  
  2711.  -Dmacro 
  2712.            Define macro macro with the string `1' as its definition. 
  2713.  
  2714.  -Dmacro=defn 
  2715.            Define macro macro as defn.  All instances of `-D' on the command 
  2716.            line are processed before any `-U' options. 
  2717.  
  2718.  -Umacro 
  2719.            Undefine macro macro.  `-U' options are evaluated after all `-D' 
  2720.            options, but before any `-include' and `-imacros' options. 
  2721.  
  2722.  -dM 
  2723.            Tell the preprocessor to output only a list of the macro definitions 
  2724.            that are in effect at the end of preprocessing.  Used with the `-E' 
  2725.            option. 
  2726.  
  2727.  -dD 
  2728.            Tell the preprocessing to pass all macro definitions into the 
  2729.            output, in their proper sequence in the rest of the output. 
  2730.  
  2731.  -dN 
  2732.            Like `-dD' except that the macro arguments and contents are omitted. 
  2733.            Only `#define name' is included in the output. 
  2734.  
  2735.  -trigraphs 
  2736.            Support ANSI C trigraphs.  The `-ansi' option also has this effect. 
  2737.  
  2738.  -Wp,option 
  2739.            Pass option as an option to the preprocessor.  If option contains 
  2740.            commas, it is split into multiple options at the commas. 
  2741.  
  2742.  
  2743. ΓòÉΓòÉΓòÉ 8.10. Passing Options to the Assembler ΓòÉΓòÉΓòÉ
  2744.  
  2745. You can pass options to the assembler. 
  2746.  
  2747.  -Wa,option 
  2748.            Pass option as an option to the assembler.  If option contains 
  2749.            commas, it is split into multiple options at the commas. 
  2750.  
  2751.  
  2752. ΓòÉΓòÉΓòÉ 8.11. Options for Linking ΓòÉΓòÉΓòÉ
  2753.  
  2754. These options come into play when the compiler links object files into an 
  2755. executable output file.  They are meaningless if the compiler is not doing a 
  2756. link step. 
  2757.  
  2758.  object-file-name 
  2759.            A file name that does not end in a special recognized suffix is 
  2760.            considered to name an object file or library.  (Object files are 
  2761.            distinguished from libraries by the linker according to the file 
  2762.            contents.)  If linking is done, these object files are used as input 
  2763.            to the linker. 
  2764.  
  2765.  -c 
  2766.  -S 
  2767.  -E 
  2768.            If any of these options is used, then the linker is not run, and 
  2769.            object file names should not be used as arguments. See Overall 
  2770.            Options. 
  2771.  
  2772.  -llibrary 
  2773.            Search the library named library when linking. 
  2774.  
  2775.            It makes a difference where in the command you write this option; 
  2776.            the linker searches processes libraries and object files in the 
  2777.            order they are specified.  Thus, `foo.o -lz bar.o' searches library 
  2778.            `z' after file `foo.o' but before `bar.o'.  If `bar.o' refers to 
  2779.            functions in `z', those functions may not be loaded. 
  2780.  
  2781.            The linker searches a standard list of directories for the library, 
  2782.            which is actually a file named `liblibrary.a'.  The linker then uses 
  2783.            this file as if it had been specified precisely by name. 
  2784.  
  2785.            The directories searched include several standard system directories 
  2786.            plus any that you specify with `-L'. 
  2787.  
  2788.            Normally the files found this way are library files---archive files 
  2789.            whose members are object files.  The linker handles an archive file 
  2790.            by scanning through it for members which define symbols that have so 
  2791.            far been referenced but not defined.  But if the file that is found 
  2792.            is an ordinary object file, it is linked in the usual fashion.  The 
  2793.            only difference between using an `-l' option and specifying a file 
  2794.            name is that `-l' surrounds library with `lib' and `.a' and searches 
  2795.            several directories. 
  2796.  
  2797.  -lobjc 
  2798.            You need this special case of the `-l' option in order to link an 
  2799.            Objective C program. 
  2800.  
  2801.  -nostartfiles 
  2802.            Do not use the standard system startup files when linking. The 
  2803.            standard system libraries are used normally, unless -nostdlib or 
  2804.            -nodefaultlibs is used. 
  2805.  
  2806.  -nodefaultlibs 
  2807.            Do not use the standard system libraries when linking. Only the 
  2808.            libraries you specify will be passed to the linker. The standard 
  2809.            startup files are used normally, unless -nostartfiles is used. 
  2810.  
  2811.  -nostdlib 
  2812.            Do not use the standard system startup files or libraries when 
  2813.            linking. No startup files and only the libraries you specify will be 
  2814.            passed to the linker. 
  2815.  
  2816.            One of the standard libraries bypassed by `-nostdlib' and 
  2817.            `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 
  2818.            that GNU CC uses to overcome shortcomings of particular machines, or 
  2819.            special needs for some languages. (See Interfacing to GNU CC Output, 
  2820.            for more discussion of `libgcc.a'.) In most cases, you need 
  2821.            `libgcc.a' even when you want to avoid other standard libraries.  In 
  2822.            other words, when you specify `-nostdlib' or `-nodefaultlibs' you 
  2823.            should usually specify `-lgcc' as well. This ensures that you have 
  2824.            no unresolved references to internal GNU CC library subroutines. 
  2825.            (For example, `__main', used to ensure C++ constructors will be 
  2826.            called; see collect2.) 
  2827.  
  2828.  -s 
  2829.            Remove all symbol table and relocation information from the 
  2830.            executable. 
  2831.  
  2832.  -static 
  2833.            On systems that support dynamic linking, this prevents linking with 
  2834.            the shared libraries.  On other systems, this option has no effect. 
  2835.  
  2836.  -shared 
  2837.            Produce a shared object which can then be linked with other objects 
  2838.            to form an executable.  Only a few systems support this option. 
  2839.  
  2840.  -symbolic 
  2841.            Bind references to global symbols when building a shared object. 
  2842.            Warn about any unresolved references (unless overridden by the link 
  2843.            editor option `-Xlinker -z -Xlinker defs').  Only a few systems 
  2844.            support this option. 
  2845.  
  2846.  -Xlinker option 
  2847.            Pass option as an option to the linker.  You can use this to supply 
  2848.            system-specific linker options which GNU CC does not know how to 
  2849.            recognize. 
  2850.  
  2851.            If you want to pass an option that takes an argument, you must use 
  2852.            `-Xlinker' twice, once for the option and once for the argument. For 
  2853.            example, to pass `-assert definitions', you must write `-Xlinker 
  2854.            -assert -Xlinker definitions'.  It does not work to write `-Xlinker 
  2855.            "-assert definitions"', because this passes the entire string as a 
  2856.            single argument, which is not what the linker expects. 
  2857.  
  2858.  -Wl,option 
  2859.            Pass option as an option to the linker.  If option contains commas, 
  2860.            it is split into multiple options at the commas. 
  2861.  
  2862.  -u symbol 
  2863.            Pretend the symbol symbol is undefined, to force linking of library 
  2864.            modules to define it.  You can use `-u' multiple times with 
  2865.            different symbols to force loading of additional library modules. 
  2866.  
  2867.  
  2868. ΓòÉΓòÉΓòÉ 8.12. Options for Directory Search ΓòÉΓòÉΓòÉ
  2869.  
  2870. These options specify directories to search for header files, for libraries and 
  2871. for parts of the compiler: 
  2872.  
  2873.  -Idir 
  2874.            Add the directory directory to the head of the list of directories 
  2875.            to be searched for header files.  This can be used to override a 
  2876.            system header file, substituting your own version, since these 
  2877.            directories are searched before the system header file directories. 
  2878.            If you use more than one `-I' option, the directories are scanned in 
  2879.            left-to-right order; the standard system directories come after. 
  2880.  
  2881.  -I- 
  2882.            Any directories you specify with `-I' options before the `-I-' 
  2883.            option are searched only for the case of `#include "file"'; they are 
  2884.            not searched for `#include <file>'. 
  2885.  
  2886.            If additional directories are specified with `-I' options after the 
  2887.            `-I-', these directories are searched for all `#include' directives. 
  2888.            (Ordinarily all `-I' directories are used this way.) 
  2889.  
  2890.            In addition, the `-I-' option inhibits the use of the current 
  2891.            directory (where the current input file came from) as the first 
  2892.            search directory for `#include "file"'.  There is no way to override 
  2893.            this effect of `-I-'.  With `-I.' you can specify searching the 
  2894.            directory which was current when the compiler was invoked.  That is 
  2895.            not exactly the same as what the preprocessor does by default, but 
  2896.            it is often satisfactory. 
  2897.  
  2898.            `-I-' does not inhibit the use of the standard system directories 
  2899.            for header files.  Thus, `-I-' and `-nostdinc' are independent. 
  2900.  
  2901.  -Ldir 
  2902.            Add directory dir to the list of directories to be searched for 
  2903.            `-l'. 
  2904.  
  2905.  -Bprefix 
  2906.            This option specifies where to find the executables, libraries, 
  2907.            include files, and data files of the compiler itself. 
  2908.  
  2909.            The compiler driver program runs one or more of the subprograms 
  2910.            `cpp', `cc1', `as' and `ld'.  It tries prefix as a prefix for each 
  2911.            program it tries to run, both with and without `machine/version/' 
  2912.            (see Target Options). 
  2913.  
  2914.            For each subprogram to be run, the compiler driver first tries the 
  2915.            `-B' prefix, if any.  If that name is not found, or if `-B' was not 
  2916.            specified, the driver tries two standard prefixes, which are 
  2917.            `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'.  If neither of those 
  2918.            results in a file name that is found, the unmodified program name is 
  2919.            searched for using the directories specified in your `PATH' 
  2920.            environment variable. 
  2921.  
  2922.            `-B' prefixes that effectively specify directory names also apply to 
  2923.            libraries in the linker, because the compiler translates these 
  2924.            options into `-L' options for the linker.  They also apply to 
  2925.            includes files in the preprocessor, because the compiler translates 
  2926.            these options into `-isystem' options for the preprocessor.  In this 
  2927.            case, the compiler appends `include' to the prefix. 
  2928.  
  2929.            The run-time support file `libgcc.a' can also be searched for using 
  2930.            the `-B' prefix, if needed.  If it is not found there, the two 
  2931.            standard prefixes above are tried, and that is all.  The file is 
  2932.            left out of the link if it is not found by those means. 
  2933.  
  2934.            Another way to specify a prefix much like the `-B' prefix is to use 
  2935.            the environment variable GCC_EXEC_PREFIX. See Environment Variables. 
  2936.  
  2937.  
  2938. ΓòÉΓòÉΓòÉ 8.13. Specifying Target Machine and Compiler Version ΓòÉΓòÉΓòÉ
  2939.  
  2940. By default, GNU CC compiles code for the same type of machine that you are 
  2941. using.  However, it can also be installed as a cross-compiler, to compile for 
  2942. some other type of machine.  In fact, several different configurations of GNU 
  2943. CC, for different target machines, can be installed side by side.  Then you 
  2944. specify which one to use with the `-b' option. 
  2945.  
  2946. In addition, older and newer versions of GNU CC can be installed side by side. 
  2947. One of them (probably the newest) will be the default, but you may sometimes 
  2948. wish to use another. 
  2949.  
  2950.  -b machine 
  2951.            The argument machine specifies the target machine for compilation. 
  2952.            This is useful when you have installed GNU CC as a cross-compiler. 
  2953.  
  2954.            The value to use for machine is the same as was specified as the 
  2955.            machine type when configuring GNU CC as a cross-compiler.  For 
  2956.            example, if a cross-compiler was configured with `configure i386v', 
  2957.            meaning to compile for an 80386 running System V, then you would 
  2958.            specify `-b i386v' to run that cross compiler. 
  2959.  
  2960.            When you do not specify `-b', it normally means to compile for the 
  2961.            same type of machine that you are using. 
  2962.  
  2963.  -V version 
  2964.            The argument version specifies which version of GNU CC to run. This 
  2965.            is useful when multiple versions are installed.  For example, 
  2966.            version might be `2.0', meaning to run GNU CC version 2.0. 
  2967.  
  2968.            The default version, when you do not specify `-V', is the last 
  2969.            version of GNU CC that you installed. 
  2970.  
  2971.  The `-b' and `-V' options actually work by controlling part of the file name 
  2972.  used for the executable files and libraries used for compilation.  A given 
  2973.  version of GNU CC, for a given target machine, is normally kept in the 
  2974.  directory `/usr/local/lib/gcc-lib/machine/version'. 
  2975.  
  2976.  Thus, sites can customize the effect of `-b' or `-V' either by changing the 
  2977.  names of these directories or adding alternate names (or symbolic links).  If 
  2978.  in directory `/usr/local/lib/gcc-lib/' the file `80386' is a link to the file 
  2979.  `i386v', then `-b 80386' becomes an alias for `-b i386v'. 
  2980.  
  2981.  In one respect, the `-b' or `-V' do not completely change to a different 
  2982.  compiler: the top-level driver program gcc that you originally invoked 
  2983.  continues to run and invoke the other executables (preprocessor, compiler per 
  2984.  se, assembler and linker) that do the real work.  However, since no real work 
  2985.  is done in the driver program, it usually does not matter that the driver 
  2986.  program in use is not the one for the specified target and version. 
  2987.  
  2988.  The only way that the driver program depends on the target machine is in the 
  2989.  parsing and handling of special machine-specific options. However, this is 
  2990.  controlled by a file which is found, along with the other executables, in the 
  2991.  directory for the specified version and target machine.  As a result, a single 
  2992.  installed driver program adapts to any specified target machine and compiler 
  2993.  version. 
  2994.  
  2995.  The driver program executable does control one significant thing, however: the 
  2996.  default version and target machine.  Therefore, you can install different 
  2997.  instances of the driver program, compiled for different targets or versions, 
  2998.  under different names. 
  2999.  
  3000.  For example, if the driver for version 2.0 is installed as ogcc and that for 
  3001.  version 2.1 is installed as gcc, then the command gcc will use version 2.1 by 
  3002.  default, while ogcc will use 2.0 by default.  However, you can choose either 
  3003.  version with either command with the `-V' option. 
  3004.  
  3005.  
  3006. ΓòÉΓòÉΓòÉ 8.14. Hardware Models and Configurations ΓòÉΓòÉΓòÉ
  3007.  
  3008. Earlier we discussed the standard option `-b' which chooses among different 
  3009. installed compilers for completely different target machines, such as Vax vs. 
  3010. 68000 vs. 80386. 
  3011.  
  3012. In addition, each of these target machine types can have its own special 
  3013. options, starting with `-m', to choose among various hardware models or 
  3014. configurations---for example, 68010 vs 68020, floating coprocessor or none.  A 
  3015. single installed version of the compiler can compile for any model or 
  3016. configuration, according to the options specified. 
  3017.  
  3018. Some configurations of the compiler also support additional special options, 
  3019. usually for compatibility with other compilers on the same platform. 
  3020.  
  3021. These options are defined by the macro TARGET_SWITCHES in the machine 
  3022. description.  The default for the options is also defined by that macro, which 
  3023. enables you to change the defaults. 
  3024.  
  3025.  M680x0 Options 
  3026.  VAX Options 
  3027.  SPARC Options 
  3028.  Convex Options 
  3029.  AMD29K Options 
  3030.  ARM Options 
  3031.  M88K Options 
  3032.  RS/6000 and PowerPC Options 
  3033.  RT Options 
  3034.  MIPS Options 
  3035.  i386 Options 
  3036.  HPPA Options 
  3037.  Intel 960 Options 
  3038.  DEC Alpha Options 
  3039.  Clipper Options 
  3040.  H8/300 Options 
  3041.  System V Options 
  3042.  
  3043.  
  3044. ΓòÉΓòÉΓòÉ 8.14.1. M680x0 Options ΓòÉΓòÉΓòÉ
  3045.  
  3046. These are the `-m' options defined for the 68000 series.  The default values 
  3047. for these options depends on which style of 68000 was selected when the 
  3048. compiler was configured; the defaults for the most common choices are given 
  3049. below. 
  3050.  
  3051.  -m68000 
  3052.  -mc68000 
  3053.            Generate output for a 68000.  This is the default when the compiler 
  3054.            is configured for 68000-based systems. 
  3055.  
  3056.  -m68020 
  3057.  -mc68020 
  3058.            Generate output for a 68020.  This is the default when the compiler 
  3059.            is configured for 68020-based systems. 
  3060.  
  3061.  -m68881 
  3062.            Generate output containing 68881 instructions for floating point. 
  3063.            This is the default for most 68020 systems unless `-nfp' was 
  3064.            specified when the compiler was configured. 
  3065.  
  3066.  -m68030 
  3067.            Generate output for a 68030.  This is the default when the compiler 
  3068.            is configured for 68030-based systems. 
  3069.  
  3070.  -m68040 
  3071.            Generate output for a 68040.  This is the default when the compiler 
  3072.            is configured for 68040-based systems. 
  3073.  
  3074.            This option inhibits the use of 68881/68882 instructions that have 
  3075.            to be emulated by software on the 68040.  If your 68040 does not 
  3076.            have code to emulate those instructions, use `-m68040'. 
  3077.  
  3078.  -m68020-40 
  3079.            Generate output for a 68040, without using any of the new 
  3080.            instructions. This results in code which can run relatively 
  3081.            efficiently on either a 68020/68881 or a 68030 or a 68040.  The 
  3082.            generated code does use the 68881 instructions that are emulated on 
  3083.            the 68040. 
  3084.  
  3085.  -mfpa 
  3086.            Generate output containing Sun FPA instructions for floating point. 
  3087.  
  3088.  -msoft-float 
  3089.            Generate output containing library calls for floating point. 
  3090.            *Warning:* the requisite libraries are not available for all m68k 
  3091.            targets.  Normally the facilities of the machine's usual C compiler 
  3092.            are used, but this can't be done directly in cross-compilation.  You 
  3093.            must make your own arrangements to provide suitable library 
  3094.            functions for cross-compilation.  The embedded targets `m68k-*-aout' 
  3095.            and `m68k-*-coff' do provide software floating point support. 
  3096.  
  3097.  -mshort 
  3098.            Consider type int to be 16 bits wide, like short int. 
  3099.  
  3100.  -mnobitfield 
  3101.            Do not use the bit-field instructions.  The `-m68000' option implies 
  3102.            `-mnobitfield'. 
  3103.  
  3104.  -mbitfield 
  3105.            Do use the bit-field instructions.  The `-m68020' option implies 
  3106.            `-mbitfield'.  This is the default if you use a configuration 
  3107.            designed for a 68020. 
  3108.  
  3109.  -mrtd 
  3110.            Use a different function-calling convention, in which functions that 
  3111.            take a fixed number of arguments return with the rtd instruction, 
  3112.            which pops their arguments while returning.  This saves one 
  3113.            instruction in the caller since there is no need to pop the 
  3114.            arguments there. 
  3115.  
  3116.            This calling convention is incompatible with the one normally used 
  3117.            on Unix, so you cannot use it if you need to call libraries compiled 
  3118.            with the Unix compiler. 
  3119.  
  3120.            Also, you must provide function prototypes for all functions that 
  3121.            take variable numbers of arguments (including printf); otherwise 
  3122.            incorrect code will be generated for calls to those functions. 
  3123.  
  3124.            In addition, seriously incorrect code will result if you call a 
  3125.            function with too many arguments.  (Normally, extra arguments are 
  3126.            harmlessly ignored.) 
  3127.  
  3128.            The rtd instruction is supported by the 68010 and 68020 processors, 
  3129.            but not by the 68000. 
  3130.  
  3131.  
  3132. ΓòÉΓòÉΓòÉ 8.14.2. VAX Options ΓòÉΓòÉΓòÉ
  3133.  
  3134. These `-m' options are defined for the Vax: 
  3135.  
  3136.  -munix 
  3137.            Do not output certain jump instructions (aobleq and so on) that the 
  3138.            Unix assembler for the Vax cannot handle across long ranges. 
  3139.  
  3140.  -mgnu 
  3141.            Do output those jump instructions, on the assumption that you will 
  3142.            assemble with the GNU assembler. 
  3143.  
  3144.  -mg 
  3145.            Output code for g-format floating point numbers instead of d-format. 
  3146.  
  3147.  
  3148. ΓòÉΓòÉΓòÉ 8.14.3. SPARC Options ΓòÉΓòÉΓòÉ
  3149.  
  3150. These `-m' switches are supported on the SPARC: 
  3151.  
  3152.  -mno-app-regs 
  3153.  -mapp-regs 
  3154.            Specify `-mapp-regs' to generate output using the global registers 2 
  3155.            through 4, which the SPARC SVR4 ABI reserves for applications.  This 
  3156.            is the default. 
  3157.  
  3158.            To be fully SVR4 ABI compliant at the cost of some performance loss, 
  3159.            specify `-mno-app-regs'.  You should compile libraries and system 
  3160.            software with this option. 
  3161.  
  3162.  -mfpu 
  3163.  -mhard-float 
  3164.            Generate output containing floating point instructions.  This is the 
  3165.            default. 
  3166.  
  3167.  -mno-fpu 
  3168.  -msoft-float 
  3169.            Generate output containing library calls for floating point. 
  3170.            *Warning:* the requisite libraries are not available for all SPARC 
  3171.            targets.  Normally the facilities of the machine's usual C compiler 
  3172.            are used, but this cannot be done directly in cross-compilation. 
  3173.            You must make your own arrangements to provide suitable library 
  3174.            functions for cross-compilation.  The embedded targets 
  3175.            `sparc-*-aout' and `sparclite-*-*' do provide software floating 
  3176.            point support. 
  3177.  
  3178.            `-msoft-float' changes the calling convention in the output file; 
  3179.            therefore, it is only useful if you compile all of a program with 
  3180.            this option.  In particular, you need to compile `libgcc.a', the 
  3181.            library that comes with GNU CC, with `-msoft-float' in order for 
  3182.            this to work. 
  3183.  
  3184.  -mhard-quad-float 
  3185.            Generate output containing quad-word (long double) floating point 
  3186.            instructions. 
  3187.  
  3188.  -msoft-quad-float 
  3189.            Generate output containing library calls for quad-word (long double) 
  3190.            floating point instructions.  The functions called are those 
  3191.            specified in the SPARC ABI.  This is the default. 
  3192.  
  3193.            As of this writing, there are no sparc implementations that have 
  3194.            hardware support for the quad-word floating point instructions. 
  3195.            They all invoke a trap handler for one of these instructions, and 
  3196.            then the trap handler emulates the effect of the instruction. 
  3197.            Because of the trap handler overhead, this is much slower than 
  3198.            calling the ABI library routines.  Thus the `-msoft-quad-float' 
  3199.            option is the default. 
  3200.  
  3201.  -mno-epilogue 
  3202.  -mepilogue 
  3203.            With `-mepilogue' (the default), the compiler always emits code for 
  3204.            function exit at the end of each function.  Any function exit in the 
  3205.            middle of the function (such as a return statement in C) will 
  3206.            generate a jump to the exit code at the end of the function. 
  3207.  
  3208.            With `-mno-epilogue', the compiler tries to emit exit code inline at 
  3209.            every function exit. 
  3210.  
  3211.  -mno-flat 
  3212.  -mflat 
  3213.            With `-mflat', the compiler does not generate save/restore 
  3214.            instructions and will use a "flat" or single register window calling 
  3215.            convention. This model uses %i7 as the frame pointer and is 
  3216.            compatible with the normal register window model.  Code from either 
  3217.            may be intermixed although debugger support is still incomplete. 
  3218.            The local registers and the input registers (0-5) are still treated 
  3219.            as "call saved" registers and will be saved on the stack as 
  3220.            necessary. 
  3221.  
  3222.            With `-mno-flat' (the default), the compiler emits save/restore 
  3223.            instructions (except for leaf functions) and is the normal mode of 
  3224.            operation. 
  3225.  
  3226.  -mno-unaligned-doubles 
  3227.  -munaligned-doubles 
  3228.            Assume that doubles have 8 byte alignment.  This is the default. 
  3229.  
  3230.            With `-munaligned-doubles', GNU CC assumes that doubles have 8 byte 
  3231.            alignment only if they are contained in another type, or if they 
  3232.            have an absolute address.  Otherwise, it assumes they have 4 byte 
  3233.            alignment. Specifying this option avoids some rare compatibility 
  3234.            problems with code generated by other compilers.  It is not the 
  3235.            default because it results in a performance loss, especially for 
  3236.            floating point code. 
  3237.  
  3238.  -mv8 
  3239.  -msparclite 
  3240.            These two options select variations on the SPARC architecture. 
  3241.  
  3242.            By default (unless specifically configured for the Fujitsu 
  3243.            SPARClite), GCC generates code for the v7 variant of the SPARC 
  3244.            architecture. 
  3245.  
  3246.            `-mv8' will give you SPARC v8 code.  The only difference from v7 
  3247.            code is that the compiler emits the integer multiply and integer 
  3248.            divide instructions which exist in SPARC v8 but not in SPARC v7. 
  3249.  
  3250.            `-msparclite' will give you SPARClite code.  This adds the integer 
  3251.            multiply, integer divide step and scan (ffs) instructions which 
  3252.            exist in SPARClite but not in SPARC v7. 
  3253.  
  3254.  -mcypress 
  3255.  -msupersparc 
  3256.            These two options select the processor for which the code is 
  3257.            optimised. 
  3258.  
  3259.            With `-mcypress' (the default), the compiler optimizes code for the 
  3260.            Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx 
  3261.            series. This is also appropriate for the older SparcStation 1, 2, 
  3262.            IPX etc. 
  3263.  
  3264.            With `-msupersparc' the compiler optimizes code for the SuperSparc 
  3265.            cpu, as used in the SparcStation 10, 1000 and 2000 series. This flag 
  3266.            also enables use of the full SPARC v8 instruction set. 
  3267.  
  3268.  In a future version of GCC, these options will very likely be renamed to 
  3269.  `-mcpu=cypress' and `-mcpu=supersparc'. 
  3270.  
  3271.  These `-m' switches are supported in addition to the above on SPARC V9 
  3272.  processors: 
  3273.  
  3274.  -mmedlow 
  3275.            Generate code for the Medium/Low code model: assume a 32 bit address 
  3276.            space. Programs are statically linked, PIC is not supported. 
  3277.            Pointers are still 64 bits. 
  3278.  
  3279.            It is very likely that a future version of GCC will rename this 
  3280.            option. 
  3281.  
  3282.  -mmedany 
  3283.            Generate code for the Medium/Anywhere code model: assume a 32 bit 
  3284.            text segment starting at offset 0, and a 32 bit data segment 
  3285.            starting anywhere (determined at link time).  Programs are 
  3286.            statically linked, PIC is not supported.  Pointers are still 64 
  3287.            bits. 
  3288.  
  3289.            It is very likely that a future version of GCC will rename this 
  3290.            option. 
  3291.  
  3292.  -mint64 
  3293.            Types long and int are 64 bits. 
  3294.  
  3295.  -mlong32 
  3296.            Types long and int are 32 bits. 
  3297.  
  3298.  -mlong64 
  3299.  -mint32 
  3300.            Type long is 64 bits, and type int is 32 bits. 
  3301.  
  3302.  -mstack-bias 
  3303.  -mno-stack-bias 
  3304.            With `-mstack-bias', GNU CC assumes that the stack pointer, and 
  3305.            frame pointer if present, are offset by -2047 which must be added 
  3306.            back when making stack frame references. Otherwise, assume no such 
  3307.            offset is present. 
  3308.  
  3309.  
  3310. ΓòÉΓòÉΓòÉ 8.14.4. Convex Options ΓòÉΓòÉΓòÉ
  3311.  
  3312. These `-m' options are defined for Convex: 
  3313.  
  3314.  -mc1 
  3315.            Generate output for C1.  The code will run on any Convex machine. 
  3316.            The preprocessor symbol __convex__c1__ is defined. 
  3317.  
  3318.  -mc2 
  3319.            Generate output for C2.  Uses instructions not available on C1. 
  3320.            Scheduling and other optimizations are chosen for max performance on 
  3321.            C2. The preprocessor symbol __convex_c2__ is defined. 
  3322.  
  3323.  -mc32 
  3324.            Generate output for C32xx.  Uses instructions not available on C1. 
  3325.            Scheduling and other optimizations are chosen for max performance on 
  3326.            C32. The preprocessor symbol __convex_c32__ is defined. 
  3327.  
  3328.  -mc34 
  3329.            Generate output for C34xx.  Uses instructions not available on C1. 
  3330.            Scheduling and other optimizations are chosen for max performance on 
  3331.            C34. The preprocessor symbol __convex_c34__ is defined. 
  3332.  
  3333.  -mc38 
  3334.            Generate output for C38xx.  Uses instructions not available on C1. 
  3335.            Scheduling and other optimizations are chosen for max performance on 
  3336.            C38. The preprocessor symbol __convex_c38__ is defined. 
  3337.  
  3338.  -margcount 
  3339.            Generate code which puts an argument count in the word preceding 
  3340.            each argument list.  This is compatible with regular CC, and a few 
  3341.            programs may need the argument count word.  GDB and other 
  3342.            source-level debuggers do not need it; this info is in the symbol 
  3343.            table. 
  3344.  
  3345.  -mnoargcount 
  3346.            Omit the argument count word.  This is the default. 
  3347.  
  3348.  -mvolatile-cache 
  3349.            Allow volatile references to be cached.  This is the default. 
  3350.  
  3351.  -mvolatile-nocache 
  3352.            Volatile references bypass the data cache, going all the way to 
  3353.            memory. This is only needed for multi-processor code that does not 
  3354.            use standard synchronization instructions.  Making non-volatile 
  3355.            references to volatile locations will not necessarily work. 
  3356.  
  3357.  -mlong32 
  3358.            Type long is 32 bits, the same as type int.  This is the default. 
  3359.  
  3360.  -mlong64 
  3361.            Type long is 64 bits, the same as type long long.  This option is 
  3362.            useless, because no library support exists for it. 
  3363.  
  3364.  
  3365. ΓòÉΓòÉΓòÉ 8.14.5. AMD29K Options ΓòÉΓòÉΓòÉ
  3366.  
  3367. These `-m' options are defined for the AMD Am29000: 
  3368.  
  3369.  -mdw 
  3370.            Generate code that assumes the DW bit is set, i.e., that byte and 
  3371.            halfword operations are directly supported by the hardware.  This is 
  3372.            the default. 
  3373.  
  3374.  -mndw 
  3375.            Generate code that assumes the DW bit is not set. 
  3376.  
  3377.  -mbw 
  3378.            Generate code that assumes the system supports byte and halfword 
  3379.            write operations.  This is the default. 
  3380.  
  3381.  -mnbw 
  3382.            Generate code that assumes the systems does not support byte and 
  3383.            halfword write operations.  `-mnbw' implies `-mndw'. 
  3384.  
  3385.  -msmall 
  3386.            Use a small memory model that assumes that all function addresses 
  3387.            are either within a single 256 KB segment or at an absolute address 
  3388.            of less than 256k.  This allows the call instruction to be used 
  3389.            instead of a const, consth, calli sequence. 
  3390.  
  3391.  -mnormal 
  3392.            Use the normal memory model: Generate call instructions only when 
  3393.            calling functions in the same file and calli instructions otherwise. 
  3394.            This works if each file occupies less than 256 KB but allows the 
  3395.            entire executable to be larger than 256 KB.  This is the default. 
  3396.  
  3397.  -mlarge 
  3398.            Always use calli instructions.  Specify this option if you expect a 
  3399.            single file to compile into more than 256 KB of code. 
  3400.  
  3401.  -m29050 
  3402.            Generate code for the Am29050. 
  3403.  
  3404.  -m29000 
  3405.            Generate code for the Am29000.  This is the default. 
  3406.  
  3407.  -mkernel-registers 
  3408.            Generate references to registers gr64-gr95 instead of to registers 
  3409.            gr96-gr127.  This option can be used when compiling kernel code that 
  3410.            wants a set of global registers disjoint from that used by user-mode 
  3411.            code. 
  3412.  
  3413.            Note that when this option is used, register names in `-f' flags 
  3414.            must use the normal, user-mode, names. 
  3415.  
  3416.  -muser-registers 
  3417.            Use the normal set of global registers, gr96-gr127.  This is the 
  3418.            default. 
  3419.  
  3420.  -mstack-check 
  3421.  -mno-stack-check 
  3422.            Insert (or do not insert) a call to __msp_check after each stack 
  3423.            adjustment.  This is often used for kernel code. 
  3424.  
  3425.  -mstorem-bug 
  3426.  -mno-storem-bug 
  3427.            `-mstorem-bug' handles 29k processors which cannot handle the 
  3428.            separation of a mtsrim insn and a storem instruction (most 29000 
  3429.            chips to date, but not the 29050). 
  3430.  
  3431.  -mno-reuse-arg-regs 
  3432.  -mreuse-arg-regs 
  3433.            `-mno-reuse-arg-regs' tells the compiler to only use incoming 
  3434.            argument registers for copying out arguments.  This helps detect 
  3435.            calling a function with fewer arguments than it was declared with. 
  3436.  
  3437.  -msoft-float 
  3438.            Generate output containing library calls for floating point. 
  3439.            *Warning:* the requisite libraries are not part of GNU CC. Normally 
  3440.            the facilities of the machine's usual C compiler are used, but this 
  3441.            can't be done directly in cross-compilation.  You must make your own 
  3442.            arrangements to provide suitable library functions for 
  3443.            cross-compilation. 
  3444.  
  3445.  
  3446. ΓòÉΓòÉΓòÉ 8.14.6. ARM Options ΓòÉΓòÉΓòÉ
  3447.  
  3448. These `-m' options are defined for Advanced RISC Machines (ARM) architectures: 
  3449.  
  3450.  -m2 
  3451.  -m3 
  3452.            These options are identical.  Generate code for the ARM2 and ARM3 
  3453.            processors.  This option is the default.  You should also use this 
  3454.            option to generate code for ARM6 processors that are running with a 
  3455.            26-bit program counter. 
  3456.  
  3457.  -m6 
  3458.            Generate code for the ARM6 processor when running with a 32-bit 
  3459.            program counter. 
  3460.  
  3461.  -mapcs 
  3462.            Generate a stack frame that is compliant with the ARM Procedure Call 
  3463.            Standard for all functions, even if this is not strictly necessary 
  3464.            for correct execution of the code. 
  3465.  
  3466.  -mbsd 
  3467.            This option only applies to RISC iX.  Emulate the native BSD-mode 
  3468.            compiler.  This is the default if `-ansi' is not specified. 
  3469.  
  3470.  -mxopen 
  3471.            This option only applies to RISC iX.  Emulate the native X/Open-mode 
  3472.            compiler. 
  3473.  
  3474.  -mno-symrename 
  3475.            This option only applies to RISC iX.  Do not run the assembler 
  3476.            post-processor, `symrename', after code has been assembled. Normally 
  3477.            it is necessary to modify some of the standard symbols in 
  3478.            preparation for linking with the RISC iX C library; this option 
  3479.            suppresses this pass.  The post-processor is never run when the 
  3480.            compiler is built for cross-compilation. 
  3481.  
  3482.  
  3483. ΓòÉΓòÉΓòÉ 8.14.7. M88K Options ΓòÉΓòÉΓòÉ
  3484.  
  3485. These `-m' options are defined for Motorola 88k architectures: 
  3486.  
  3487.  -m88000 
  3488.            Generate code that works well on both the m88100 and the m88110. 
  3489.  
  3490.  -m88100 
  3491.            Generate code that works best for the m88100, but that also runs on 
  3492.            the m88110. 
  3493.  
  3494.  -m88110 
  3495.            Generate code that works best for the m88110, and may not run on the 
  3496.            m88100. 
  3497.  
  3498.  -mbig-pic 
  3499.            Obsolete option to be removed from the next revision. Use `-fPIC'. 
  3500.  
  3501.  -midentify-revision 
  3502.            Include an ident directive in the assembler output recording the 
  3503.            source file name, compiler name and version, timestamp, and 
  3504.            compilation flags used. 
  3505.  
  3506.  -mno-underscores 
  3507.            In assembler output, emit symbol names without adding an underscore 
  3508.            character at the beginning of each name.  The default is to use an 
  3509.            underscore as prefix on each name. 
  3510.  
  3511.  -mocs-debug-info 
  3512.  -mno-ocs-debug-info 
  3513.            Include (or omit) additional debugging information (about registers 
  3514.            used in each stack frame) as specified in the 88open Object 
  3515.            Compatibility Standard, ``OCS''.  This extra information allows 
  3516.            debugging of code that has had the frame pointer eliminated.  The 
  3517.            default for DG/UX, SVr4, and Delta 88 SVr3.2 is to include this 
  3518.            information; other 88k configurations omit this information by 
  3519.            default. 
  3520.  
  3521.  -mocs-frame-position 
  3522.            When emitting COFF debugging information for automatic variables and 
  3523.            parameters stored on the stack, use the offset from the canonical 
  3524.            frame address, which is the stack pointer (register 31) on entry to 
  3525.            the function.  The DG/UX, SVr4, Delta88 SVr3.2, and BCS 
  3526.            configurations use `-mocs-frame-position'; other 88k configurations 
  3527.            have the default `-mno-ocs-frame-position'. 
  3528.  
  3529.  -mno-ocs-frame-position 
  3530.            When emitting COFF debugging information for automatic variables and 
  3531.            parameters stored on the stack, use the offset from the frame 
  3532.            pointer register (register 30).  When this option is in effect, the 
  3533.            frame pointer is not eliminated when debugging information is 
  3534.            selected by the -g switch. 
  3535.  
  3536.  -moptimize-arg-area 
  3537.  -mno-optimize-arg-area 
  3538.            Control how function arguments are stored in stack frames. 
  3539.            `-moptimize-arg-area' saves space by optimizing them, but this 
  3540.            conflicts with the 88open specifications.  The opposite alternative, 
  3541.            `-mno-optimize-arg-area', agrees with 88open standards.  By default 
  3542.            GNU CC does not optimize the argument area. 
  3543.  
  3544.  -mshort-data-num 
  3545.            Generate smaller data references by making them relative to r0, 
  3546.            which allows loading a value using a single instruction (rather than 
  3547.            the usual two).  You control which data references are affected by 
  3548.            specifying num with this option.  For example, if you specify 
  3549.            `-mshort-data-512', then the data references affected are those 
  3550.            involving displacements of less than 512 bytes. `-mshort-data-num' 
  3551.            is not effective for num greater than 64k. 
  3552.  
  3553.  -mserialize-volatile 
  3554.  -mno-serialize-volatile 
  3555.            Do, or don't, generate code to guarantee sequential consistency of 
  3556.            volatile memory references.  By default, consistency is guaranteed. 
  3557.  
  3558.            The order of memory references made by the MC88110 processor does 
  3559.            not always match the order of the instructions requesting those 
  3560.            references.  In particular, a load instruction may execute before a 
  3561.            preceding store instruction.  Such reordering violates sequential 
  3562.            consistency of volatile memory references, when there are multiple 
  3563.            processors.  When consistency must be guaranteed, GNU C generates 
  3564.            special instructions, as needed, to force execution in the proper 
  3565.            order. 
  3566.  
  3567.            The MC88100 processor does not reorder memory references and so 
  3568.            always provides sequential consistency.  However, by default, GNU C 
  3569.            generates the special instructions to guarantee consistency even 
  3570.            when you use `-m88100', so that the code may be run on an MC88110 
  3571.            processor.  If you intend to run your code only on the MC88100 
  3572.            processor, you may use `-mno-serialize-volatile'. 
  3573.  
  3574.            The extra code generated to guarantee consistency may affect the 
  3575.            performance of your application.  If you know that you can safely 
  3576.            forgo this guarantee, you may use `-mno-serialize-volatile'. 
  3577.  
  3578.  -msvr4 
  3579.  -msvr3 
  3580.            Turn on (`-msvr4') or off (`-msvr3') compiler extensions related to 
  3581.            System V release 4 (SVr4).  This controls the following: 
  3582.  
  3583.              1. Which variant of the assembler syntax to emit. 
  3584.  
  3585.              2. `-msvr4' makes the C preprocessor recognize `#pragma weak' that 
  3586.                 is used on System V release 4. 
  3587.  
  3588.              3. `-msvr4' makes GNU CC issue additional declaration directives 
  3589.                 used in SVr4. 
  3590.  
  3591.            `-msvr4' is the default for the m88k-motorola-sysv4 and m88k-dg-dgux 
  3592.            m88k configurations. `-msvr3' is the default for all other m88k 
  3593.            configurations. 
  3594.  
  3595.  -mversion-03.00 
  3596.            This option is obsolete, and is ignored. 
  3597.  
  3598.  -mno-check-zero-division 
  3599.  -mcheck-zero-division 
  3600.            Do, or don't, generate code to guarantee that integer division by 
  3601.            zero will be detected.  By default, detection is guaranteed. 
  3602.  
  3603.            Some models of the MC88100 processor fail to trap upon integer 
  3604.            division by zero under certain conditions.  By default, when 
  3605.            compiling code that might be run on such a processor, GNU C 
  3606.            generates code that explicitly checks for zero-valued divisors and 
  3607.            traps with exception number 503 when one is detected.  Use of 
  3608.            mno-check-zero-division suppresses such checking for code generated 
  3609.            to run on an MC88100 processor. 
  3610.  
  3611.            GNU C assumes that the MC88110 processor correctly detects all 
  3612.            instances of integer division by zero.  When `-m88110' is specified, 
  3613.            both `-mcheck-zero-division' and `-mno-check-zero-division' are 
  3614.            ignored, and no explicit checks for zero-valued divisors are 
  3615.            generated. 
  3616.  
  3617.  -muse-div-instruction 
  3618.            Use the div instruction for signed integer division on the MC88100 
  3619.            processor.  By default, the div instruction is not used. 
  3620.  
  3621.            On the MC88100 processor the signed integer division instruction 
  3622.            div) traps to the operating system on a negative operand.  The 
  3623.            operating system transparently completes the operation, but at a 
  3624.            large cost in execution time.  By default, when compiling code that 
  3625.            might be run on an MC88100 processor, GNU C emulates signed integer 
  3626.            division using the unsigned integer division instruction divu), 
  3627.            thereby avoiding the large penalty of a trap to the operating 
  3628.            system.  Such emulation has its own, smaller, execution cost in both 
  3629.            time and space.  To the extent that your code's important signed 
  3630.            integer division operations are performed on two nonnegative 
  3631.            operands, it may be desirable to use the div instruction directly. 
  3632.  
  3633.            On the MC88110 processor the div instruction (also known as the divs 
  3634.            instruction) processes negative operands without trapping to the 
  3635.            operating system.  When `-m88110' is specified, 
  3636.            `-muse-div-instruction' is ignored, and the div instruction is used 
  3637.            for signed integer division. 
  3638.  
  3639.            Note that the result of dividing INT_MIN by -1 is undefined.  In 
  3640.            particular, the behavior of such a division with and without 
  3641.            `-muse-div-instruction'  may differ. 
  3642.  
  3643.  -mtrap-large-shift 
  3644.  -mhandle-large-shift 
  3645.            Include code to detect bit-shifts of more than 31 bits; 
  3646.            respectively, trap such shifts or emit code to handle them properly. 
  3647.            By default GNU CC makes no special provision for large bit shifts. 
  3648.  
  3649.  -mwarn-passed-structs 
  3650.            Warn when a function passes a struct as an argument or result. 
  3651.            Structure-passing conventions have changed during the evolution of 
  3652.            the C language, and are often the source of portability problems. 
  3653.            By default, GNU CC issues no such warning. 
  3654.  
  3655.  
  3656. ΓòÉΓòÉΓòÉ 8.14.8. IBM RS/6000 and PowerPC Options ΓòÉΓòÉΓòÉ
  3657.  
  3658. These `-m' options are defined for the IBM RS/6000 and PowerPC: 
  3659.  
  3660.  -mpower 
  3661.  -mno-power 
  3662.  -mpower2 
  3663.  -mno-power2 
  3664.  -mpowerpc 
  3665.  -mno-powerpc 
  3666.  -mpowerpc-gpopt 
  3667.  -mno-powerpc-gpopt 
  3668.  -mpowerpc-gfxopt 
  3669.  -mno-powerpc-gfxopt 
  3670.            GNU CC supports two related instruction set architectures for the 
  3671.            RS/6000 and PowerPC.  The POWER instruction set are those 
  3672.            instructions supported by the `rios' chip set used in the original 
  3673.            RS/6000 systems and the PowerPC instruction set is the architecture 
  3674.            of the Motorola MPC6xx microprocessors.  The PowerPC architecture 
  3675.            defines 64-bit instructions, but they are not supported by any 
  3676.            current processors. 
  3677.  
  3678.            Neither architecture is a subset of the other.  However there is a 
  3679.            large common subset of instructions supported by both.  An MQ 
  3680.            register is included in processors supporting the POWER 
  3681.            architecture. 
  3682.  
  3683.            You use these options to specify which instructions are available on 
  3684.            the processor you are using.  The default value of these options is 
  3685.            determined when configuring GNU CC.  Specifying the `-mcpu=cpu_type' 
  3686.            overrides the specification of these options.  We recommend you use 
  3687.            that option rather than these. 
  3688.  
  3689.            The `-mpower' option allows GNU CC to generate instructions that are 
  3690.            found only in the POWER architecture and to use the MQ register. 
  3691.            Specifying `-mpower2' implies `-power' and also allows GNU CC to 
  3692.            generate instructions that are present in the POWER2 architecture 
  3693.            but not the original POWER architecture. 
  3694.  
  3695.            The `-mpowerpc' option allows GNU CC to generate instructions that 
  3696.            are found only in the 32-bit subset of the PowerPC architecture. 
  3697.            Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows GNU 
  3698.            CC to use the optional PowerPC architecture instructions in the 
  3699.            General Purpose group, including floating-point square root. 
  3700.            Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 
  3701.            GNU CC to use the optional PowerPC architecture instructions in the 
  3702.            Graphics group, including floating-point select. 
  3703.  
  3704.            If you specify both `-mno-power' and `-mno-powerpc', GNU CC will use 
  3705.            only the instructions in the common subset of both architectures 
  3706.            plus some special AIX common-mode calls, and will not use the MQ 
  3707.            register.  Specifying both `-mpower' and `-mpowerpc' permits GNU CC 
  3708.            to use any instruction from either architecture and to allow use of 
  3709.            the MQ register; specify this for the Motorola MPC601. 
  3710.  
  3711.  -mnew-mnemonics 
  3712.  -mold-mnemonics 
  3713.            Select which mnemonics to use in the generated assembler code. 
  3714.            `-mnew-mnemonics' requests output that uses the assembler mnemonics 
  3715.            defined for the PowerPC architecture, while `-mold-mnemonics' 
  3716.            requests the assembler mnemonics defined for the POWER architecture. 
  3717.            Instructions defined in only one architecture have only one 
  3718.            mnemonic; GNU CC uses that mnemonic irrespective of which of these 
  3719.            options is specified. 
  3720.  
  3721.            PowerPC assemblers support both the old and new mnemonics, as will 
  3722.            later POWER assemblers.  Current POWER assemblers only support the 
  3723.            old mnemonics.  Specify `-mnew-mnemonics' if you have an assembler 
  3724.            that supports them, otherwise specify `-mold-mnemonics'. 
  3725.  
  3726.            The default value of these options depends on how GNU CC was 
  3727.            configured. Specifying `-mcpu=cpu_type' sometimes overrides the 
  3728.            value of these option.  Unless you are building a cross-compiler, 
  3729.            you should normally not specify either `-mnew-mnemonics' or 
  3730.            `-mold-mnemonics', but should instead accept the default. 
  3731.  
  3732.  -mcpu=cpu_type 
  3733.            Set architecture type, register usage, choice of mnemonics, and 
  3734.            instruction scheduling parameters for machine type cpu_type.  By 
  3735.            default, cpu_type is the target system defined when GNU CC was 
  3736.            configured. Supported values for cpu_type are `rios1', `rios2', 
  3737.            `rsc', `601', `603', `604', `power', `powerpc', `403', and `common'. 
  3738.            `-mcpu=power' and `-mcpu=powerpc' specify generic POWER and pure 
  3739.            PowerPC (i.e., not MPC601) architecture machine types, with an 
  3740.            appropriate, generic processor model assumed for scheduling 
  3741.            purposes. 
  3742.  
  3743.            Specifying `-mcpu=rios1', `-mcpu=rios2', `-mcpu=rsc', or 
  3744.            `-mcpu=power' enables the `-mpower' option and disables the 
  3745.            `-mpowerpc' option; `-mcpu=601' enables both the `-mpower' and 
  3746.            `-mpowerpc' options; `-mcpu=603', `-mcpu=604', `-mcpu=403', and 
  3747.            `-mcpu=powerpc' enable the `-mpowerpc' option and disable the 
  3748.            `-mpower' option; `-mcpu=common' disables both the `-mpower' and 
  3749.            `-mpowerpc' options. 
  3750.  
  3751.            To generate code that will operate on all members of the RS/6000 and 
  3752.            PowerPC families, specify `-mcpu=common'.  In that case, GNU CC will 
  3753.            use only the instructions in the common subset of both architectures 
  3754.            plus some special AIX common-mode calls, and will not use the MQ 
  3755.            register.  GNU CC assumes a generic processor model for scheduling 
  3756.            purposes. 
  3757.  
  3758.            Specifying `-mcpu=rios1', `-mcpu=rios2', `-mcpu=rsc', or 
  3759.            `-mcpu=power' also disables the `new-mnemonics' option. Specifying 
  3760.            `-mcpu=601', `-mcpu=603', `-mcpu=604', `403', or `-mcpu=powerpc' 
  3761.            also enables the `new-mnemonics' option. 
  3762.  
  3763.  -mfull-toc 
  3764.  -mno-fp-in-toc 
  3765.  -mno-sum-in-toc 
  3766.  -mminimal-toc 
  3767.            Modify generation of the TOC (Table Of Contents), which is created 
  3768.            for every executable file.  The `-mfull-toc' option is selected by 
  3769.            default.  In that case, GNU CC will allocate at least one TOC entry 
  3770.            for each unique non-automatic variable reference in your program. 
  3771.            GNU CC will also place floating-point constants in the TOC. 
  3772.            However, only 16,384 entries are available in the TOC. 
  3773.  
  3774.            If you receive a linker error message that saying you have 
  3775.            overflowed the available TOC space, you can reduce the amount of TOC 
  3776.            space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' options. 
  3777.            `-mno-fp-in-toc' prevents GNU CC from putting floating-point 
  3778.            constants in the TOC and `-mno-sum-in-toc' forces GNU CC to generate 
  3779.            code to calculate the sum of an address and a constant at run-time 
  3780.            instead of putting that sum into the TOC.  You may specify one or 
  3781.            both of these options.  Each causes GNU CC to produce very slightly 
  3782.            slower and larger code at the expense of conserving TOC space. 
  3783.  
  3784.            If you still run out of space in the TOC even when you specify both 
  3785.            of these options, specify `-mminimal-toc' instead.  This option 
  3786.            causes GNU CC to make only one TOC entry for every file.  When you 
  3787.            specify this option, GNU CC will produce code that is slower and 
  3788.            larger but which uses extremely little TOC space.  You may wish to 
  3789.            use this option only on files that contain less frequently executed 
  3790.            code. 
  3791.  
  3792.  -msoft-float 
  3793.  -mhard-float 
  3794.            Generate code that does not use (uses) the floating-point register 
  3795.            set. Software floating point emulation is provided if you use the 
  3796.            `-msoft-float' option, and pass the option to GNU CC when linking. 
  3797.  
  3798.  -mmultiple 
  3799.  -mno-multiple 
  3800.            Generate code that uses (does not use) the load multiple word 
  3801.            instructions and the store multiple word instructions.  These 
  3802.            instructions are generated by default on POWER systems, and not 
  3803.            generated on PowerPC systems.  Do not use `-mmultiple' on little 
  3804.            endian PowerPC systems, since those instructions do not work when 
  3805.            the processor is in little endian mode. 
  3806.  
  3807.  -mstring 
  3808.  -mno-string 
  3809.            Generate code that uses (does not use) the load string instructions 
  3810.            and the store string word instructions to save multiple registers 
  3811.            and do small block moves.  These instructions are generated by 
  3812.            default on POWER systems, anod not generated on PowerPC systems.  Do 
  3813.            not use `-mstring' on little endian PowerPC systems, since those 
  3814.            instructions do not work when the processor is in little endian 
  3815.            mode. 
  3816.  
  3817.  -mno-bit-align 
  3818.  -mbit-align 
  3819.            On System V.4 and embedded PowerPC systems do not (do) force 
  3820.            structures and unions that contain bit fields to be aligned to the 
  3821.            base type of the bit field. 
  3822.  
  3823.            For example, by default a structure containing nothing but 8 
  3824.            unsigned bitfields of length 1 would be aligned to a 4 byte boundary 
  3825.            and have a size of 4 bytes.  By using `-mno-bit-align', the 
  3826.            structure would be aligned to a 1 byte boundary and be one byte in 
  3827.            size. 
  3828.  
  3829.  -mno-strict-align 
  3830.  -mstrict-align 
  3831.            On System V.4 and embedded PowerPC systems do not (do) assume that 
  3832.            unaligned memory references will be handled by the system. 
  3833.  
  3834.  -mrelocatable 
  3835.  -mno-relocatable 
  3836.            On embedded PowerPC systems generate code that allows (does not 
  3837.            allow) the program to be relocated to a different address at 
  3838.            runtime. 
  3839.  
  3840.  -mno-toc 
  3841.  -mtoc 
  3842.            On System V.4 and embedded PowerPC systems do not (do) assume that 
  3843.            register 2 contains a pointer to a global area pointing to the 
  3844.            addresses used in the program. 
  3845.  
  3846.  -mno-traceback 
  3847.  -mtraceback 
  3848.            On embedded PowerPC systems do not (do) generate a traceback tag 
  3849.            before the start of the function.  This tag can be used by the 
  3850.            debugger to identify where the start of a function is. 
  3851.  
  3852.  -mlittle 
  3853.  -mlittle-endian 
  3854.            On System V.4 and embedded PowerPC systems compile code for the 
  3855.            processor in little endian mode.  The `-mlittle-endian' option is 
  3856.            the same as `-mlittle'. 
  3857.  
  3858.  -mbig 
  3859.  -mbig-endian 
  3860.            On System V.4 and embedded PowerPC systems compile code for the 
  3861.            processor in big endian mode.  The `-mbig-endian' option is the same 
  3862.            as `-mbig'. 
  3863.  
  3864.  -mcall-sysv 
  3865.            On System V.4 and embedded PowerPC systems compile code using 
  3866.            calling conventions that adheres to the March 1995 draft of the 
  3867.            System V Application Binary Interface, PowerPC processor supplement. 
  3868.            This is the default unless you configured GCC using 
  3869.            `powerpc-*-eabiaix'. 
  3870.  
  3871.  -mcall-aix 
  3872.            On System V.4 and embedded PowerPC systems compile code using 
  3873.            calling conventions that are similar to those used on AIX.  This is 
  3874.            the default if you configured GCC using `powerpc-*-eabiaix'. 
  3875.  
  3876.  -mprototype 
  3877.  
  3878.  -mno-prototype 
  3879.            On System V.4 and embedded PowerPC systems assume that all calls to 
  3880.            variable argument functions are properly prototyped.  Otherwise, the 
  3881.            compiler must insert an instruction before every non prototyped call 
  3882.            to set or clear bit 6 of the condition code register (CR) to 
  3883.            indicate whether floating point values were passed in the floating 
  3884.            point registers in case the function takes a variable arguments. 
  3885.            With `-mprototype', only calls to prototyped variable argument 
  3886.            functions will set or clear the bit. 
  3887.  
  3888.  
  3889. ΓòÉΓòÉΓòÉ 8.14.9. IBM RT Options ΓòÉΓòÉΓòÉ
  3890.  
  3891. These `-m' options are defined for the IBM RT PC: 
  3892.  
  3893.  -min-line-mul 
  3894.            Use an in-line code sequence for integer multiplies.  This is the 
  3895.            default. 
  3896.  
  3897.  -mcall-lib-mul 
  3898.            Call lmul$$ for integer multiples. 
  3899.  
  3900.  -mfull-fp-blocks 
  3901.            Generate full-size floating point data blocks, including the minimum 
  3902.            amount of scratch space recommended by IBM.  This is the default. 
  3903.  
  3904.  -mminimum-fp-blocks 
  3905.            Do not include extra scratch space in floating point data blocks. 
  3906.            This results in smaller code, but slower execution, since scratch 
  3907.            space must be allocated dynamically. 
  3908.  
  3909.  -mfp-arg-in-fpregs 
  3910.            Use a calling sequence incompatible with the IBM calling convention 
  3911.            in which floating point arguments are passed in floating point 
  3912.            registers. Note that varargs.h and stdargs.h will not work with 
  3913.            floating point operands if this option is specified. 
  3914.  
  3915.  -mfp-arg-in-gregs 
  3916.            Use the normal calling convention for floating point arguments. 
  3917.            This is the default. 
  3918.  
  3919.  -mhc-struct-return 
  3920.            Return structures of more than one word in memory, rather than in a 
  3921.            register.  This provides compatibility with the MetaWare HighC (hc) 
  3922.            compiler.  Use the option `-fpcc-struct-return' for compatibility 
  3923.            with the Portable C Compiler (pcc). 
  3924.  
  3925.  -mnohc-struct-return 
  3926.            Return some structures of more than one word in registers, when 
  3927.            convenient.  This is the default.  For compatibility with the 
  3928.            IBM-supplied compilers, use the option `-fpcc-struct-return' or the 
  3929.            option `-mhc-struct-return'. 
  3930.  
  3931.  
  3932. ΓòÉΓòÉΓòÉ 8.14.10. MIPS Options ΓòÉΓòÉΓòÉ
  3933.  
  3934. These `-m' options are defined for the MIPS family of computers: 
  3935.  
  3936.  -mcpu=cpu type 
  3937.            Assume the defaults for the machine type cpu type when scheduling 
  3938.            instructions.  The choices for cpu type are `r2000', `r3000', 
  3939.            `r4000', `r4400', `r4600', and `r6000'.  While picking a specific 
  3940.            cpu type will schedule things appropriately for that particular 
  3941.            chip, the compiler will not generate any code that does not meet 
  3942.            level 1 of the MIPS ISA (instruction set architecture) without the 
  3943.            `-mips2' or `-mips3' switches being used. 
  3944.  
  3945.  -mips1 
  3946.            Issue instructions from level 1 of the MIPS ISA.  This is the 
  3947.            default. `r3000' is the default cpu type at this ISA level. 
  3948.  
  3949.  -mips2 
  3950.            Issue instructions from level 2 of the MIPS ISA (branch likely, 
  3951.            square root instructions).  `r6000' is the default cpu type at this 
  3952.            ISA level. 
  3953.  
  3954.  -mips3 
  3955.            Issue instructions from level 3 of the MIPS ISA (64 bit 
  3956.            instructions). `r4000' is the default cpu type at this ISA level. 
  3957.            This option does not change the sizes of any of the C data types. 
  3958.  
  3959.  -mfp32 
  3960.            Assume that 32 32-bit floating point registers are available.  This 
  3961.            is the default. 
  3962.  
  3963.  -mfp64 
  3964.            Assume that 32 64-bit floating point registers are available.  This 
  3965.            is the default when the `-mips3' option is used. 
  3966.  
  3967.  -mgp32 
  3968.            Assume that 32 32-bit general purpose registers are available.  This 
  3969.            is the default. 
  3970.  
  3971.  -mgp64 
  3972.            Assume that 32 64-bit general purpose registers are available.  This 
  3973.            is the default when the `-mips3' option is used. 
  3974.  
  3975.  -mint64 
  3976.            Types long, int, and pointer are 64 bits.  This works only if 
  3977.            `-mips3' is also specified. 
  3978.  
  3979.  -mlong64 
  3980.            Types long and pointer are 64 bits, and type int is 32 bits. This 
  3981.            works only if `-mips3' is also specified. 
  3982.  
  3983.  -mmips-as 
  3984.            Generate code for the MIPS assembler, and invoke `mips-tfile' to add 
  3985.            normal debug information.  This is the default for all platforms 
  3986.            except for the OSF/1 reference platform, using the OSF/rose object 
  3987.            format.  If the either of the `-gstabs' or `-gstabs+' switches are 
  3988.            used, the `mips-tfile' program will encapsulate the stabs within 
  3989.            MIPS ECOFF. 
  3990.  
  3991.  -mgas 
  3992.            Generate code for the GNU assembler.  This is the default on the 
  3993.            OSF/1 reference platform, using the OSF/rose object format. 
  3994.  
  3995.  -mrnames 
  3996.  -mno-rnames 
  3997.            The `-mrnames' switch says to output code using the MIPS software 
  3998.            names for the registers, instead of the hardware names (ie, a0 
  3999.            instead of $4).  The only known assembler that supports this option 
  4000.            is the Algorithmics assembler. 
  4001.  
  4002.  -mgpopt 
  4003.  -mno-gpopt 
  4004.            The `-mgpopt' switch says to write all of the data declarations 
  4005.            before the instructions in the text section, this allows the MIPS 
  4006.            assembler to generate one word memory references instead of using 
  4007.            two words for short global or static data items.  This is on by 
  4008.            default if optimization is selected. 
  4009.  
  4010.  -mstats 
  4011.  -mno-stats 
  4012.            For each non-inline function processed, the `-mstats' switch causes 
  4013.            the compiler to emit one line to the standard error file to print 
  4014.            statistics about the program (number of registers saved, stack size, 
  4015.            etc.). 
  4016.  
  4017.  -mmemcpy 
  4018.  -mno-memcpy 
  4019.            The `-mmemcpy' switch makes all block moves call the appropriate 
  4020.            string function (`memcpy' or `bcopy') instead of possibly generating 
  4021.            inline code. 
  4022.  
  4023.  -mmips-tfile 
  4024.  -mno-mips-tfile 
  4025.            The `-mno-mips-tfile' switch causes the compiler not postprocess the 
  4026.            object file with the `mips-tfile' program, after the MIPS assembler 
  4027.            has generated it to add debug support.  If `mips-tfile' is not run, 
  4028.            then no local variables will be available to the debugger.  In 
  4029.            addition, `stage2' and `stage3' objects will have the temporary file 
  4030.            names passed to the assembler embedded in the object file, which 
  4031.            means the objects will not compare the same.  The `-mno-mips-tfile' 
  4032.            switch should only be used when there are bugs in the `mips-tfile' 
  4033.            program that prevents compilation. 
  4034.  
  4035.  -msoft-float 
  4036.            Generate output containing library calls for floating point. 
  4037.            *Warning:* the requisite libraries are not part of GNU CC. Normally 
  4038.            the facilities of the machine's usual C compiler are used, but this 
  4039.            can't be done directly in cross-compilation.  You must make your own 
  4040.            arrangements to provide suitable library functions for 
  4041.            cross-compilation. 
  4042.  
  4043.  -mhard-float 
  4044.            Generate output containing floating point instructions.  This is the 
  4045.            default if you use the unmodified sources. 
  4046.  
  4047.  -mabicalls 
  4048.  -mno-abicalls 
  4049.            Emit (or do not emit) the pseudo operations `.abicalls', `.cpload', 
  4050.            and `.cprestore' that some System V.4 ports use for position 
  4051.            independent code. 
  4052.  
  4053.  -mlong-calls 
  4054.  -mno-long-calls 
  4055.            Do all calls with the `JALR' instruction, which requires loading up 
  4056.            a function's address into a register before the call. You need to 
  4057.            use this switch, if you call outside of the current 512 megabyte 
  4058.            segment to functions that are not through pointers. 
  4059.  
  4060.  -mhalf-pic 
  4061.  -mno-half-pic 
  4062.            Put pointers to extern references into the data section and load 
  4063.            them up, rather than put the references in the text section. 
  4064.  
  4065.  -membedded-pic 
  4066.  -mno-embedded-pic 
  4067.            Generate PIC code suitable for some embedded systems.  All calls are 
  4068.            made using PC relative address, and all data is addressed using the 
  4069.            $gp register. This requires GNU as and GNU ld which do most of the 
  4070.            work. 
  4071.  
  4072.  -membedded-data 
  4073.  -mno-embedded-data 
  4074.            Allocate variables to the read-only data section first if possible, 
  4075.            then next in the small data section if possible, otherwise in data. 
  4076.            This gives slightly slower code than the default, but reduces the 
  4077.            amount of RAM required when executing, and thus may be preferred for 
  4078.            some embedded systems. 
  4079.  
  4080.  -msingle-float 
  4081.  -mdouble-float 
  4082.            The `-msingle-float' switch tells gcc to assume that the floating 
  4083.            point coprocessor only supports single precision operations, as on 
  4084.            the `r4650' chip.  The `-mdouble-float' switch permits gcc to use 
  4085.            double precision operations.  This is the default. 
  4086.  
  4087.  -mmad 
  4088.  -mno-mad 
  4089.            Permit use of the `mad', `madu' and `mul' instructions, as on the 
  4090.            `r4650' chip. 
  4091.  
  4092.  -m4650 
  4093.            Turns on `-msingle-float', `-mmad', and, at least for now, 
  4094.            `-mcpu=r4650'. 
  4095.  
  4096.  -EL 
  4097.            Compile code for the processor in little endian mode. The requisite 
  4098.            libraries are assumed to exist. 
  4099.  
  4100.  -EB 
  4101.            Compile code for the processor in big endian mode. The requisite 
  4102.            libraries are assumed to exist. 
  4103.  
  4104.  -G num 
  4105.            Put global and static items less than or equal to num bytes into the 
  4106.            small data or bss sections instead of the normal data or bss 
  4107.            section.  This allows the assembler to emit one word memory 
  4108.            reference instructions based on the global pointer (gp or $28), 
  4109.            instead of the normal two words used.  By default, num is 8 when the 
  4110.            MIPS assembler is used, and 0 when the GNU assembler is used.  The 
  4111.            `-G num' switch is also passed to the assembler and linker. All 
  4112.            modules should be compiled with the same `-G num' value. 
  4113.  
  4114.  -nocpp 
  4115.            Tell the MIPS assembler to not run it's preprocessor over user 
  4116.            assembler files (with a `.s' suffix) when assembling them. 
  4117.  
  4118.  These options are defined by the macro TARGET_SWITCHES in the machine 
  4119.  description.  The default for the options is also defined by that macro, which 
  4120.  enables you to change the defaults. 
  4121.  
  4122.  
  4123. ΓòÉΓòÉΓòÉ 8.14.11. Intel 386 Options ΓòÉΓòÉΓòÉ
  4124.  
  4125. These `-m' options are defined for the i386 family of computers: 
  4126.  
  4127.  -m486 
  4128.  -m386 
  4129.            Control whether or not code is optimized for a 486 instead of an 
  4130.            386.  Code generated for an 486 will run on a 386 and vice versa. 
  4131.  
  4132.  -mieee-fp 
  4133.  -mno-ieee-fp 
  4134.            Control whether or not the compiler uses IEEE floating point 
  4135.            comparisons.  These handle correctly the case where the result of a 
  4136.            comparison is unordered. 
  4137.  
  4138.  -msoft-float 
  4139.            Generate output containing library calls for floating point. 
  4140.            *Warning:* the requisite libraries are not part of GNU CC. Normally 
  4141.            the facilities of the machine's usual C compiler are used, but this 
  4142.            can't be done directly in cross-compilation.  You must make your own 
  4143.            arrangements to provide suitable library functions for 
  4144.            cross-compilation. 
  4145.  
  4146.            On machines where a function returns floating point results in the 
  4147.            80387 register stack, some floating point opcodes may be emitted 
  4148.            even if `-msoft-float' is used. 
  4149.  
  4150.  -mno-fp-ret-in-387 
  4151.            Do not use the FPU registers for return values of functions. 
  4152.  
  4153.            The usual calling convention has functions return values of types 
  4154.            float and double in an FPU register, even if there is no FPU.  The 
  4155.            idea is that the operating system should emulate an FPU. 
  4156.  
  4157.            The option `-mno-fp-ret-in-387' causes such values to be returned in 
  4158.            ordinary CPU registers instead. 
  4159.  
  4160.  -mno-fancy-math-387 
  4161.            Some 387 emulators do not support the sin, cos and sqrt instructions 
  4162.            for the 387.  Specify this option to avoid generating those 
  4163.            instructions. This option is the default on FreeBSD. As of revision 
  4164.            2.6.1, these instructions are not generated unless you also use the 
  4165.            `-ffast-math' switch. 
  4166.  
  4167.  -malign-double 
  4168.  -mno-align-double 
  4169.            Control whether GNU CC aligns double, long double, and long long 
  4170.            variables on a two word boundary or a one word boundary.  Aligning 
  4171.            double variables on a two word boundary will produce code that runs 
  4172.            somewhat faster on a `Pentium' at the expense of more memory. 
  4173.  
  4174.            *Warning:* if you use the `-malign-double' switch, structures 
  4175.            containing the above types will be aligned differently than the 
  4176.            published application binary interface specifications for the 386. 
  4177.  
  4178.  -msvr3-shlib 
  4179.  -mno-svr3-shlib 
  4180.            Control whether GNU CC places uninitialized locals into bss or data. 
  4181.            `-msvr3-shlib' places these locals into bss. These options are 
  4182.            meaningful only on System V Release 3. 
  4183.  
  4184.  -mno-wide-multiply 
  4185.  -mwide-multiply 
  4186.            Control whether GNU CC uses the mul and imul that produce 64 bit 
  4187.            results in eax:edx from 32 bit operands to do long long multiplies 
  4188.            and 32-bit division by constants. 
  4189.  
  4190.  -mrtd 
  4191.            Use a different function-calling convention, in which functions that 
  4192.            take a fixed number of arguments return with the ret num 
  4193.            instruction, which pops their arguments while returning.  This saves 
  4194.            one instruction in the caller since there is no need to pop the 
  4195.            arguments there. 
  4196.  
  4197.            You can specify that an individual function is called with this 
  4198.            calling sequence with the function attribute `stdcall'.  You can 
  4199.            also override the `-mrtd' option by using the function attribute 
  4200.            `cdecl'. See Function Attributes 
  4201.  
  4202.            *Warning:* this calling convention is incompatible with the one 
  4203.            normally used on Unix, so you cannot use it if you need to call 
  4204.            libraries compiled with the Unix compiler. 
  4205.  
  4206.            Also, you must provide function prototypes for all functions that 
  4207.            take variable numbers of arguments (including printf); otherwise 
  4208.            incorrect code will be generated for calls to those functions. 
  4209.  
  4210.            In addition, seriously incorrect code will result if you call a 
  4211.            function with too many arguments.  (Normally, extra arguments are 
  4212.            harmlessly ignored.) 
  4213.  
  4214.  -mreg-alloc=regs 
  4215.            Control the default allocation order of integer registers.  The 
  4216.            string regs is a series of letters specifying a register.  The 
  4217.            supported letters are: a allocate EAX; b allocate EBX; c allocate 
  4218.            ECX; d allocate EDX; S allocate ESI; D allocate EDI; B allocate EBP. 
  4219.  
  4220.  -mregparm=num 
  4221.            Control how many registers are used to pass integer arguments.  By 
  4222.            default, no registers are used to pass arguments, and at most 3 
  4223.            registers can be used.  You can control this behavior for a specific 
  4224.            function by using the function attribute `regparm'.  See Function 
  4225.            Attributes 
  4226.  
  4227.            *Warning:* if you use this switch, and num is nonzero, then you must 
  4228.            build all modules with the same value, including any libraries. 
  4229.            This includes the system libraries and startup modules. 
  4230.  
  4231.  -malign-loops=num 
  4232.            Align loops to a 2 raised to a num byte boundary.  If 
  4233.            `-malign-loops' is not specified, the default is 2. 
  4234.  
  4235.  -malign-jumps=num 
  4236.            Align instructions that are only jumped to to a 2 raised to a num 
  4237.            byte boundary.  If `-malign-jumps' is not specified, the default is 
  4238.            2 if optimizing for a 386, and 4 if optimizing for a 486. 
  4239.  
  4240.  -malign-functions=num 
  4241.            Align the start of functions to a 2 raised to num byte boundary. If 
  4242.            `-malign-jumps' is not specified, the default is 2 if optimizing for 
  4243.            a 386, and 4 if optimizing for a 486. 
  4244.  
  4245.  
  4246. ΓòÉΓòÉΓòÉ 8.14.12. HPPA Options ΓòÉΓòÉΓòÉ
  4247.  
  4248. These `-m' options are defined for the HPPA family of computers: 
  4249.  
  4250.  -mpa-risc-1-0 
  4251.            Generate code for a PA 1.0 processor. 
  4252.  
  4253.  -mpa-risc-1-1 
  4254.            Generate code for a PA 1.1 processor. 
  4255.  
  4256.  -mjump-in-delay 
  4257.            Fill delay slots of function calls with unconditional jump 
  4258.            instructions by modifying the return pointer for the function call 
  4259.            to be the target of the conditional jump. 
  4260.  
  4261.  -mmillicode-long-calls 
  4262.            Generate code which assumes millicode routines can not be reached by 
  4263.            the standard millicode call sequence, linker-generated long-calls, 
  4264.            or linker-modified millicode calls.  In practice this should only be 
  4265.            needed for dynamicly linked executables with extremely large 
  4266.            SHLIB_INFO sections. 
  4267.  
  4268.  -mdisable-fpregs 
  4269.            Prevent floating point registers from being used in any manner. 
  4270.            This is necessary for compiling kernels which perform lazy context 
  4271.            switching of floating point registers.  If you use this option and 
  4272.            attempt to perform floating point operations, the compiler will 
  4273.            abort. 
  4274.  
  4275.  -mdisable-indexing 
  4276.            Prevent the compiler from using indexing address modes.  This avoids 
  4277.            some rather obscure problems when compiling MIG generated code under 
  4278.            MACH. 
  4279.  
  4280.  -mfast-indirect-calls 
  4281.            Generate code which performs faster indirect calls.  Such code is 
  4282.            suitable for kernels and for static linking.  The fast indirect call 
  4283.            code will fail miserably if it's part of a dynamically linked 
  4284.            executable and in the presense of nested functions. 
  4285.  
  4286.  -mportable-runtime 
  4287.            Use the portable calling conventions proposed by HP for ELF systems. 
  4288.  
  4289.  -mgas 
  4290.            Enable the use of assembler directives only GAS understands. 
  4291.  
  4292.  -mschedule=cpu type 
  4293.            Schedule code according to the constraints for the machine type cpu 
  4294.            type.  The choices for cpu type are `700' for 7n0 machines, `7100' 
  4295.            for 7n5 machines, and `7100' for 7n2 machines.  `700' is the default 
  4296.            for cpu type. 
  4297.  
  4298.            Note the `7100LC' scheduling information is incomplete and using 
  4299.            `7100LC' often leads to bad schedules.  For now it's probably best 
  4300.            to use `7100' instead of `7100LC' for the 7n2 machines. 
  4301.  
  4302.  -msoft-float 
  4303.            Generate output containing library calls for floating point. 
  4304.            *Warning:* the requisite libraries are not available for all HPPA 
  4305.            targets.  Normally the facilities of the machine's usual C compiler 
  4306.            are used, but this cannot be done directly in cross-compilation. 
  4307.            You must make your own arrangements to provide suitable library 
  4308.            functions for cross-compilation.  The embedded target 
  4309.            `hppa1.1-*-pro' does provide software floating point support. 
  4310.  
  4311.            `-msoft-float' changes the calling convention in the output file; 
  4312.            therefore, it is only useful if you compile all of a program with 
  4313.            this option.  In particular, you need to compile `libgcc.a', the 
  4314.            library that comes with GNU CC, with `-msoft-float' in order for 
  4315.            this to work. 
  4316.  
  4317.  
  4318. ΓòÉΓòÉΓòÉ 8.14.13. Intel 960 Options ΓòÉΓòÉΓòÉ
  4319.  
  4320. These `-m' options are defined for the Intel 960 implementations: 
  4321.  
  4322.  -mcpu type 
  4323.            Assume the defaults for the machine type cpu type for some of the 
  4324.            other options, including instruction scheduling, floating point 
  4325.            support, and addressing modes.  The choices for cpu type are `ka', 
  4326.            `kb', `mc', `ca', `cf', `sa', and `sb'. The default is `kb'. 
  4327.  
  4328.  -mnumerics 
  4329.  -msoft-float 
  4330.            The `-mnumerics' option indicates that the processor does support 
  4331.            floating-point instructions.  The `-msoft-float' option indicates 
  4332.            that floating-point support should not be assumed. 
  4333.  
  4334.  -mleaf-procedures 
  4335.  -mno-leaf-procedures 
  4336.            Do (or do not) attempt to alter leaf procedures to be callable with 
  4337.            the bal instruction as well as call.  This will result in more 
  4338.            efficient code for explicit calls when the bal instruction can be 
  4339.            substituted by the assembler or linker, but less efficient code in 
  4340.            other cases, such as calls via function pointers, or using a linker 
  4341.            that doesn't support this optimization. 
  4342.  
  4343.  -mtail-call 
  4344.  -mno-tail-call 
  4345.            Do (or do not) make additional attempts (beyond those of the 
  4346.            machine-independent portions of the compiler) to optimize 
  4347.            tail-recursive calls into branches.  You may not want to do this 
  4348.            because the detection of cases where this is not valid is not 
  4349.            totally complete.  The default is `-mno-tail-call'. 
  4350.  
  4351.  -mcomplex-addr 
  4352.  -mno-complex-addr 
  4353.            Assume (or do not assume) that the use of a complex addressing mode 
  4354.            is a win on this implementation of the i960.  Complex addressing 
  4355.            modes may not be worthwhile on the K-series, but they definitely are 
  4356.            on the C-series. The default is currently `-mcomplex-addr' for all 
  4357.            processors except the CB and CC. 
  4358.  
  4359.  -mcode-align 
  4360.  -mno-code-align 
  4361.            Align code to 8-byte boundaries for faster fetching (or don't 
  4362.            bother). Currently turned on by default for C-series implementations 
  4363.            only. 
  4364.  
  4365.  -mic-compat 
  4366.  -mic2.0-compat 
  4367.  -mic3.0-compat 
  4368.            Enable compatibility with iC960 v2.0 or v3.0. 
  4369.  
  4370.  -masm-compat 
  4371.  -mintel-asm 
  4372.            Enable compatibility with the iC960 assembler. 
  4373.  
  4374.  -mstrict-align 
  4375.  -mno-strict-align 
  4376.            Do not permit (do permit) unaligned accesses. 
  4377.  
  4378.  -mold-align 
  4379.            Enable structure-alignment compatibility with Intel's gcc release 
  4380.            version 1.3 (based on gcc 1.37).  Currently this is buggy in that 
  4381.            `#pragma align 1' is always assumed as well, and cannot be turned 
  4382.            off. 
  4383.  
  4384.  
  4385. ΓòÉΓòÉΓòÉ 8.14.14. DEC Alpha Options ΓòÉΓòÉΓòÉ
  4386.  
  4387. These `-m' options are defined for the DEC Alpha implementations: 
  4388.  
  4389.  -mno-soft-float 
  4390.  -msoft-float 
  4391.            Use (do not use) the hardware floating-point instructions for 
  4392.            floating-point operations.  When -msoft-float is specified, 
  4393.            functions in `libgcc1.c' will be used to perform floating-point 
  4394.            operations.  Unless they are replaced by routines that emulate the 
  4395.            floating-point operations, or compiled in such a way as to call such 
  4396.            emulations routines, these routines will issue floating-point 
  4397.            operations.  If you are compiling for an Alpha without 
  4398.            floating-point operations, you must ensure that the library is built 
  4399.            so as not to call them. 
  4400.  
  4401.            Note that Alpha implementations without floating-point operations 
  4402.            are required to have floating-point registers. 
  4403.  
  4404.  -mfp-reg 
  4405.  -mno-fp-regs 
  4406.            Generate code that uses (does not use) the floating-point register 
  4407.            set. -mno-fp-regs implies -msoft-float.  If the floating-point 
  4408.            register set is not used, floating point operands are passed in 
  4409.            integer registers as if they were integers and floating-point 
  4410.            results are passed in $0 instead of $f0.  This is a non-standard 
  4411.            calling sequence, so any function with a floating-point argument or 
  4412.            return value called by code compiled with -mno-fp-regs must also be 
  4413.            compiled with that option. 
  4414.  
  4415.            A typical use of this option is building a kernel that does not use, 
  4416.            and hence need not save and restore, any floating-point registers. 
  4417.  
  4418.  
  4419. ΓòÉΓòÉΓòÉ 8.14.15. Clipper Options ΓòÉΓòÉΓòÉ
  4420.  
  4421. These `-m' options are defined for the Clipper implementations: 
  4422.  
  4423.  -mc300 
  4424.            Produce code for a C300 Clipper processor. This is the default. 
  4425.            -mc400 Produce code for a C400 Clipper processor i.e. use floating 
  4426.            point registers f8..f15. 
  4427.  
  4428.  
  4429. ΓòÉΓòÉΓòÉ 8.14.16. H8/300 Options ΓòÉΓòÉΓòÉ
  4430.  
  4431. These `-m' options are defined for the H8/300 implementations: 
  4432.  
  4433.  -mrelax 
  4434.            Shorten some address references at link time, when possible; uses 
  4435.            the linker option `-relax'. See ld and the H8/300, for a fuller 
  4436.            description. 
  4437.  
  4438.  -mh 
  4439.            Generate code for the H8/300H. 
  4440.  
  4441.  
  4442. ΓòÉΓòÉΓòÉ 8.14.17. Options for System V ΓòÉΓòÉΓòÉ
  4443.  
  4444. These additional options are available on System V Release 4 for compatibility 
  4445. with other compilers on those systems: 
  4446.  
  4447.  -Qy 
  4448.            Identify the versions of each tool used by the compiler, in a .ident 
  4449.            assembler directive in the output. 
  4450.  
  4451.  -Qn 
  4452.            Refrain from adding .ident directives to the output file (this is 
  4453.            the default). 
  4454.  
  4455.  -YP,dirs 
  4456.            Search the directories dirs, and no others, for libraries specified 
  4457.            with `-l'. 
  4458.  
  4459.  -Ym,dir 
  4460.            Look in the directory dir to find the M4 preprocessor. The assembler 
  4461.            uses this option. 
  4462.  
  4463.  
  4464. ΓòÉΓòÉΓòÉ 8.15. Options for Code Generation Conventions ΓòÉΓòÉΓòÉ
  4465.  
  4466. These machine-independent options control the interface conventions used in 
  4467. code generation. 
  4468.  
  4469. Most of them have both positive and negative forms; the negative form of 
  4470. `-ffoo' would be `-fno-foo'.  In the table below, only one of the forms is 
  4471. listed---the one which is not the default.  You can figure out the other form 
  4472. by either removing `no-' or adding it. 
  4473.  
  4474.  -fpcc-struct-return 
  4475.            Return ``short'' struct and union values in memory like longer ones, 
  4476.            rather than in registers.  This convention is less efficient, but it 
  4477.            has the advantage of allowing intercallability between GNU 
  4478.            CC-compiled files and files compiled with other compilers. 
  4479.  
  4480.            The precise convention for returning structures in memory depends on 
  4481.            the target configuration macros. 
  4482.  
  4483.            Short structures and unions are those whose size and alignment match 
  4484.            that of some integer type. 
  4485.  
  4486.  -freg-struct-return 
  4487.            Use the convention that struct and union values are returned in 
  4488.            registers when possible.  This is more efficient for small 
  4489.            structures than `-fpcc-struct-return'. 
  4490.  
  4491.            If you specify neither `-fpcc-struct-return' nor its contrary 
  4492.            `-freg-struct-return', GNU CC defaults to whichever convention is 
  4493.            standard for the target.  If there is no standard convention, GNU CC 
  4494.            defaults to `-fpcc-struct-return', except on targets where GNU CC is 
  4495.            the principal compiler.  In those cases, we can choose the standard, 
  4496.            and we chose the more efficient register return alternative. 
  4497.  
  4498.  -fshort-enums 
  4499.            Allocate to an enum type only as many bytes as it needs for the 
  4500.            declared range of possible values.  Specifically, the enum type will 
  4501.            be equivalent to the smallest integer type which has enough room. 
  4502.  
  4503.  -fshort-double 
  4504.            Use the same size for double as for float. 
  4505.  
  4506.  -fshared-data 
  4507.            Requests that the data and non-const variables of this compilation 
  4508.            be shared data rather than private data.  The distinction makes 
  4509.            sense only on certain operating systems, where shared data is shared 
  4510.            between processes running the same program, while private data 
  4511.            exists in one copy per process. 
  4512.  
  4513.  -fno-common 
  4514.            Allocate even uninitialized global variables in the bss section of 
  4515.            the object file, rather than generating them as common blocks.  This 
  4516.            has the effect that if the same variable is declared (without 
  4517.            extern) in two different compilations, you will get an error when 
  4518.            you link them. The only reason this might be useful is if you wish 
  4519.            to verify that the program will work on other systems which always 
  4520.            work this way. 
  4521.  
  4522.  -fno-ident 
  4523.            Ignore the `#ident' directive. 
  4524.  
  4525.  -fno-gnu-linker 
  4526.            Do not output global initializations (such as C++ constructors and 
  4527.            destructors) in the form used by the GNU linker (on systems where 
  4528.            the GNU linker is the standard method of handling them).  Use this 
  4529.            option when you want to use a non-GNU linker, which also requires 
  4530.            using the collect2 program to make sure the system linker includes 
  4531.            constructors and destructors.  (collect2 is included in the GNU CC 
  4532.            distribution.)  For systems which must use collect2, the compiler 
  4533.            driver gcc is configured to do this automatically. 
  4534.  
  4535.  -finhibit-size-directive 
  4536.            Don't output a .size assembler directive, or anything else that 
  4537.            would cause trouble if the function is split in the middle, and the 
  4538.            two halves are placed at locations far apart in memory.  This option 
  4539.            is used when compiling `crtstuff.c'; you should not need to use it 
  4540.            for anything else. 
  4541.  
  4542.  -fverbose-asm 
  4543.            Put extra commentary information in the generated assembly code to 
  4544.            make it more readable.  This option is generally only of use to 
  4545.            those who actually need to read the generated assembly code (perhaps 
  4546.            while debugging the compiler itself). 
  4547.  
  4548.  -fvolatile 
  4549.            Consider all memory references through pointers to be volatile. 
  4550.  
  4551.  -fvolatile-global 
  4552.            Consider all memory references to extern and global data items to be 
  4553.            volatile. 
  4554.  
  4555.  -fpic 
  4556.            Generate position-independent code (PIC) suitable for use in a 
  4557.            shared library, if supported for the target machine.  Such code 
  4558.            accesses all constant addresses through a global offset table (GOT). 
  4559.            If the GOT size for the linked executable exceeds a machine-specific 
  4560.            maximum size, you get an error message from the linker indicating 
  4561.            that `-fpic' does not work; in that case, recompile with `-fPIC' 
  4562.            instead.  (These maximums are 16k on the m88k, 8k on the Sparc, and 
  4563.            32k on the m68k and RS/6000.  The 386 has no such limit.) 
  4564.  
  4565.            Position-independent code requires special support, and therefore 
  4566.            works only on certain machines.  For the 386, GNU CC supports PIC 
  4567.            for System V but not for the Sun 386i.  Code generated for the IBM 
  4568.            RS/6000 is always position-independent. 
  4569.  
  4570.            The GNU assembler does not fully support PIC.  Currently, you must 
  4571.            use some other assembler in order for PIC to work.  We would welcome 
  4572.            volunteers to upgrade GAS to handle this; the first part of the job 
  4573.            is to figure out what the assembler must do differently. 
  4574.  
  4575.  -fPIC 
  4576.            If supported for the target machine, emit position-independent code, 
  4577.            suitable for dynamic linking and avoiding any limit on the size of 
  4578.            the global offset table.  This option makes a difference on the 
  4579.            m68k, m88k and the Sparc. 
  4580.  
  4581.            Position-independent code requires special support, and therefore 
  4582.            works only on certain machines. 
  4583.  
  4584.  -ffixed-reg 
  4585.            Treat the register named reg as a fixed register; generated code 
  4586.            should never refer to it (except perhaps as a stack pointer, frame 
  4587.            pointer or in some other fixed role). 
  4588.  
  4589.            reg must be the name of a register.  The register names accepted are 
  4590.            machine-specific and are defined in the REGISTER_NAMES macro in the 
  4591.            machine description macro file. 
  4592.  
  4593.            This flag does not have a negative form, because it specifies a 
  4594.            three-way choice. 
  4595.  
  4596.  -fcall-used-reg 
  4597.            Treat the register named reg as an allocatable register that is 
  4598.            clobbered by function calls.  It may be allocated for temporaries or 
  4599.            variables that do not live across a call.  Functions compiled this 
  4600.            way will not save and restore the register reg. 
  4601.  
  4602.            Use of this flag for a register that has a fixed pervasive role in 
  4603.            the machine's execution model, such as the stack pointer or frame 
  4604.            pointer, will produce disastrous results. 
  4605.  
  4606.            This flag does not have a negative form, because it specifies a 
  4607.            three-way choice. 
  4608.  
  4609.  -fcall-saved-reg 
  4610.            Treat the register named reg as an allocatable register saved by 
  4611.            functions.  It may be allocated even for temporaries or variables 
  4612.            that live across a call.  Functions compiled this way will save and 
  4613.            restore the register reg if they use it. 
  4614.  
  4615.            Use of this flag for a register that has a fixed pervasive role in 
  4616.            the machine's execution model, such as the stack pointer or frame 
  4617.            pointer, will produce disastrous results. 
  4618.  
  4619.            A different sort of disaster will result from the use of this flag 
  4620.            for a register in which function values may be returned. 
  4621.  
  4622.            This flag does not have a negative form, because it specifies a 
  4623.            three-way choice. 
  4624.  
  4625.  -fpack-struct 
  4626.            Pack all structure members together without holes.  Usually you 
  4627.            would not want to use this option, since it makes the code 
  4628.            suboptimal, and the offsets of structure members won't agree with 
  4629.            system libraries. 
  4630.  
  4631.  +e0 
  4632.  +e1 
  4633.            Control whether virtual function definitions in classes are used to 
  4634.            generate code, or only to define interfaces for their callers.  (C++ 
  4635.            only). 
  4636.  
  4637.            These options are provided for compatibility with cfront 1.x usage; 
  4638.            the recommended alternative GNU C++ usage is in flux. See 
  4639.            Declarations and Definitions in One Header. 
  4640.  
  4641.            With `+e0', virtual function definitions in classes are declared 
  4642.            extern; the declaration is used only as an interface specification, 
  4643.            not to generate code for the virtual functions (in this 
  4644.            compilation). 
  4645.  
  4646.            With `+e1', G++ actually generates the code implementing virtual 
  4647.            functions defined in the code, and makes them publicly visible. 
  4648.  
  4649.  
  4650. ΓòÉΓòÉΓòÉ 8.16. Environment Variables Affecting GNU CC ΓòÉΓòÉΓòÉ
  4651.  
  4652. This section describes several environment variables that affect how GNU CC 
  4653. operates.  They work by specifying directories or prefixes to use when 
  4654. searching for various kinds of files. 
  4655.  
  4656. Note that you can also specify places to search using options such as `-B', 
  4657. `-I' and `-L' (see Directory Options).  These take precedence over places 
  4658. specified using environment variables, which in turn take precedence over those 
  4659. specified by the configuration of GNU CC.  See Driver. 
  4660.  
  4661.  TMPDIR 
  4662.            If TMPDIR is set, it specifies the directory to use for temporary 
  4663.            files.  GNU CC uses temporary files to hold the output of one stage 
  4664.            of compilation which is to be used as input to the next stage: for 
  4665.            example, the output of the preprocessor, which is the input to the 
  4666.            compiler proper. 
  4667.  
  4668.  GCC_EXEC_PREFIX 
  4669.            If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the names 
  4670.            of the subprograms executed by the compiler.  No slash is added when 
  4671.            this prefix is combined with the name of a subprogram, but you can 
  4672.            specify a prefix that ends with a slash if you wish. 
  4673.  
  4674.            If GNU CC cannot find the subprogram using the specified prefix, it 
  4675.            tries looking in the usual places for the subprogram. 
  4676.  
  4677.            The default value of GCC_EXEC_PREFIX is `prefix/lib/gcc-lib/' where 
  4678.            prefix is the value of prefix when you ran the `configure' script. 
  4679.  
  4680.            Other prefixes specified with `-B' take precedence over this prefix. 
  4681.  
  4682.            This prefix is also used for finding files such as `crt0.o' that are 
  4683.            used for linking. 
  4684.  
  4685.            In addition, the prefix is used in an unusual way in finding the 
  4686.            directories to search for header files.  For each of the standard 
  4687.            directories whose name normally begins with `/usr/local/lib/gcc-lib' 
  4688.            (more precisely, with the value of GCC_INCLUDE_DIR), GNU CC tries 
  4689.            replacing that beginning with the specified prefix to produce an 
  4690.            alternate directory name.  Thus, with `-Bfoo/', GNU CC will search 
  4691.            `foo/bar' where it would normally search `/usr/local/lib/bar'. These 
  4692.            alternate directories are searched first; the standard directories 
  4693.            come next. 
  4694.  
  4695.  COMPILER_PATH 
  4696.            The value of COMPILER_PATH is a colon-separated list of directories, 
  4697.            much like PATH.  GNU CC tries the directories thus specified when 
  4698.            searching for subprograms, if it can't find the subprograms using 
  4699.            GCC_EXEC_PREFIX. 
  4700.  
  4701.  LIBRARY_PATH 
  4702.            The value of LIBRARY_PATH is a colon-separated list of directories, 
  4703.            much like PATH.  When configured as a native compiler, GNU CC tries 
  4704.            the directories thus specified when searching for special linker 
  4705.            files, if it can't find them using GCC_EXEC_PREFIX.  Linking using 
  4706.            GNU CC also uses these directories when searching for ordinary 
  4707.            libraries for the `-l' option (but directories specified with `-L' 
  4708.            come first). 
  4709.  
  4710.  C_INCLUDE_PATH 
  4711.  CPLUS_INCLUDE_PATH 
  4712.  OBJC_INCLUDE_PATH 
  4713.            These environment variables pertain to particular languages.  Each 
  4714.            variable's value is a colon-separated list of directories, much like 
  4715.            PATH.  When GNU CC searches for header files, it tries the 
  4716.            directories listed in the variable for the language you are using, 
  4717.            after the directories specified with `-I' but before the standard 
  4718.            header file directories. 
  4719.  
  4720.  DEPENDENCIES_OUTPUT 
  4721.            If this variable is set, its value specifies how to output 
  4722.            dependencies for Make based on the header files processed by the 
  4723.            compiler.  This output looks much like the output from the `-M' 
  4724.            option (see Preprocessor Options), but it goes to a separate file, 
  4725.            and is in addition to the usual results of compilation. 
  4726.  
  4727.            The value of DEPENDENCIES_OUTPUT can be just a file name, in which 
  4728.            case the Make rules are written to that file, guessing the target 
  4729.            name from the source file name.  Or the value can have the form 
  4730.            `file target', in which case the rules are written to file file 
  4731.            using target as the target name. 
  4732.  
  4733.  
  4734. ΓòÉΓòÉΓòÉ 8.17. Running Protoize ΓòÉΓòÉΓòÉ
  4735.  
  4736. The program protoize is an optional part of GNU C.  You can use it to add 
  4737. prototypes to a program, thus converting the program to ANSI C in one respect. 
  4738. The companion program unprotoize does the reverse: it removes argument types 
  4739. from any prototypes that are found. 
  4740.  
  4741. When you run these programs, you must specify a set of source files as command 
  4742. line arguments.  The conversion programs start out by compiling these files to 
  4743. see what functions they define.  The information gathered about a file foo is 
  4744. saved in a file named `foo.X'. 
  4745.  
  4746. After scanning comes actual conversion.  The specified files are all eligible 
  4747. to be converted; any files they include (whether sources or just headers) are 
  4748. eligible as well. 
  4749.  
  4750. But not all the eligible files are converted.  By default, protoize and 
  4751. unprotoize convert only source and header files in the current directory.  You 
  4752. can specify additional directories whose files should be converted with the `-d 
  4753. directory' option.  You can also specify particular files to exclude with the 
  4754. `-x file' option.  A file is converted if it is eligible, its directory name 
  4755. matches one of the specified directory names, and its name within the directory 
  4756. has not been excluded. 
  4757.  
  4758. Basic conversion with protoize consists of rewriting most function definitions 
  4759. and function declarations to specify the types of the arguments.  The only ones 
  4760. not rewritten are those for varargs functions. 
  4761.  
  4762. protoize optionally inserts prototype declarations at the beginning of the 
  4763. source file, to make them available for any calls that precede the function's 
  4764. definition.  Or it can insert prototype declarations with block scope in the 
  4765. blocks where undeclared functions are called. 
  4766.  
  4767. Basic conversion with unprotoize consists of rewriting most function 
  4768. declarations to remove any argument types, and rewriting function definitions 
  4769. to the old-style pre-ANSI form. 
  4770.  
  4771. Both conversion programs print a warning for any function declaration or 
  4772. definition that they can't convert.  You can suppress these warnings with `-q'. 
  4773.  
  4774. The output from protoize or unprotoize replaces the original source file.  The 
  4775. original file is renamed to a name ending with `.save'.  If the `.save' file 
  4776. already exists, then the source file is simply discarded. 
  4777.  
  4778. protoize and unprotoize both depend on GNU CC itself to scan the program and 
  4779. collect information about the functions it uses. So neither of these programs 
  4780. will work until GNU CC is installed. 
  4781.  
  4782. Here is a table of the options you can use with protoize and unprotoize.  Each 
  4783. option works with both programs unless otherwise stated. 
  4784.  
  4785.  -B directory 
  4786.            Look for the file `SYSCALLS.c.X' in directory, instead of the usual 
  4787.            directory (normally `/usr/local/lib').  This file contains prototype 
  4788.            information about standard system functions.  This option applies 
  4789.            only to protoize. 
  4790.  
  4791.  -c compilation-options 
  4792.            Use  compilation-options as the options when running gcc to produce 
  4793.            the `.X' files.  The special option `-aux-info' is always passed in 
  4794.            addition, to tell gcc to write a `.X' file. 
  4795.  
  4796.            Note that the compilation options must be given as a single argument 
  4797.            to protoize or unprotoize.  If you want to specify several gcc 
  4798.            options, you must quote the entire set of compilation options to 
  4799.            make them a single word in the shell. 
  4800.  
  4801.            There are certain gcc arguments that you cannot use, because they 
  4802.            would produce the wrong kind of output.  These include `-g', `-O', 
  4803.            `-c', `-S', and `-o' If you include these in the 
  4804.            compilation-options, they are ignored. 
  4805.  
  4806.  -C 
  4807.            Rename files to end in `.C' instead of `.c'. This is convenient if 
  4808.            you are converting a C program to C++. This option applies only to 
  4809.            protoize. 
  4810.  
  4811.  -g 
  4812.            Add explicit global declarations.  This means inserting explicit 
  4813.            declarations at the beginning of each source file for each function 
  4814.            that is called in the file and was not declared.  These declarations 
  4815.            precede the first function definition that contains a call to an 
  4816.            undeclared function.  This option applies only to protoize. 
  4817.  
  4818.  -i string 
  4819.            Indent old-style parameter declarations with the string string. This 
  4820.            option applies only to protoize. 
  4821.  
  4822.            unprotoize converts prototyped function definitions to old-style 
  4823.            function definitions, where the arguments are declared between the 
  4824.            argument list and the initial `{'.  By default, unprotoize uses five 
  4825.            spaces as the indentation.  If you want to indent with just one 
  4826.            space instead, use `-i " "'. 
  4827.  
  4828.  -k 
  4829.            Keep the `.X' files.  Normally, they are deleted after conversion is 
  4830.            finished. 
  4831.  
  4832.  -l 
  4833.            Add explicit local declarations.  protoize with `-l' inserts a 
  4834.            prototype declaration for each function in each block which calls 
  4835.            the function without any declaration.  This option applies only to 
  4836.            protoize. 
  4837.  
  4838.  -n 
  4839.            Make no real changes.  This mode just prints information about the 
  4840.            conversions that would have been done without `-n'. 
  4841.  
  4842.  -N 
  4843.            Make no `.save' files.  The original files are simply deleted. Use 
  4844.            this option with caution. 
  4845.  
  4846.  -p program 
  4847.            Use the program program as the compiler.  Normally, the name `gcc' 
  4848.            is used. 
  4849.  
  4850.  -q 
  4851.            Work quietly.  Most warnings are suppressed. 
  4852.  
  4853.  -v 
  4854.            Print the version number, just like `-v' for gcc. 
  4855.  
  4856.  If you need special compiler options to compile one of your program's source 
  4857.  files, then you should generate that file's `.X' file specially, by running 
  4858.  gcc on that source file with the appropriate options and the option 
  4859.  `-aux-info'.  Then run protoize on the entire set of files.  protoize will use 
  4860.  the existing `.X' file because it is newer than the source file. For example: 
  4861.  
  4862.   gcc -Dfoo=bar file1.c -aux-info
  4863.   protoize *.c
  4864.  
  4865.  You need to include the special files along with the rest in the protoize 
  4866.  command, even though their `.X' files already exist, because otherwise they 
  4867.  won't get converted. 
  4868.  
  4869.  See Protoize Caveats, for more information on how to use protoize 
  4870.  successfully. 
  4871.  
  4872.  
  4873. ΓòÉΓòÉΓòÉ 9. Installing GNU CC ΓòÉΓòÉΓòÉ
  4874.  
  4875.  Configurations                          Configurations Supported by GNU CC. 
  4876.  Other Dir                               Compiling in a separate directory (not 
  4877.                                          where the source is). 
  4878.  Cross-Compiler                          Building and installing a 
  4879.                                          cross-compiler. 
  4880.  Sun Install                             See below for installation on the Sun. 
  4881.  VMS Install                             See below for installation on VMS. 
  4882.  Collect2                                How collect2 works; how it finds ld. 
  4883.  Header Dirs                             Understanding the standard header file 
  4884.                                          directories. 
  4885.  
  4886.  Here is the procedure for installing GNU CC on a Unix system.  See VMS 
  4887.  Install, for VMS systems.  In this section we assume you compile in the same 
  4888.  directory that contains the source files; see Other Dir, to find out how to 
  4889.  compile in a separate directory on Unix systems. 
  4890.  
  4891.  You cannot install GNU C by itself on MSDOS; it will not compile under any 
  4892.  MSDOS compiler except itself.  You need to get the complete compilation 
  4893.  package DJGPP, which includes binaries as well as sources, and includes all 
  4894.  the necessary compilation tools and libraries. 
  4895.  
  4896.    1. If you have built GNU CC previously in the same directory for a different 
  4897.       target machine, do `make distclean' to delete all files that might be 
  4898.       invalid.  One of the files this deletes is `Makefile'; if `make 
  4899.       distclean' complains that `Makefile' does not exist, it probably means 
  4900.       that the directory is already suitably clean. 
  4901.  
  4902.    2. On a System V release 4 system, make sure `/usr/bin' precedes `/usr/ucb' 
  4903.       in PATH.  The cc command in `/usr/ucb' uses libraries which have bugs. 
  4904.  
  4905.    3. Specify the host, build and target machine configurations.  You do this 
  4906.       by running the file `configure'. 
  4907.  
  4908.       The build machine is the system which you are using, the host machine is 
  4909.       the system where you want to run the resulting compiler (normally the 
  4910.       build machine), and the target machine is the system for which you want 
  4911.       the compiler to generate code. 
  4912.  
  4913.       If you are building a compiler to produce code for the machine it runs on 
  4914.       (a native compiler), you normally do not need to specify any operands to 
  4915.       `configure'; it will try to guess the type of machine you are on and use 
  4916.       that as the build, host and target machines.  So you don't need to 
  4917.       specify a configuration when building a native compiler unless 
  4918.       `configure' cannot figure out what your configuration is or guesses 
  4919.       wrong. 
  4920.  
  4921.       In those cases, specify the build machine's configuration name with the 
  4922.       `--build' option; the host and target will default to be the same as the 
  4923.       build machine.  (If you are building a cross-compiler, see 
  4924.       Cross-Compiler.) 
  4925.  
  4926.       Here is an example: 
  4927.  
  4928.             ./configure --build=sparc-sun-sunos4.1
  4929.  
  4930.       A configuration name may be canonical or it may be more or less 
  4931.       abbreviated. 
  4932.  
  4933.       A canonical configuration name has three parts, separated by dashes. It 
  4934.       looks like this: `cpu-company-system'. (The three parts may themselves 
  4935.       contain dashes; `configure' can figure out which dashes serve which 
  4936.       purpose.)  For example, `m68k-sun-sunos4.1' specifies a Sun 3. 
  4937.  
  4938.       You can also replace parts of the configuration by nicknames or aliases. 
  4939.       For example, `sun3' stands for `m68k-sun', so `sun3-sunos4.1' is another 
  4940.       way to specify a Sun 3.  You can also use simply `sun3-sunos', since the 
  4941.       version of SunOS is assumed by default to be version 4.  `sun3-bsd' also 
  4942.       works, since `configure' knows that the only BSD variant on a Sun 3 is 
  4943.       SunOS. 
  4944.  
  4945.       You can specify a version number after any of the system types, and some 
  4946.       of the CPU types.  In most cases, the version is irrelevant, and will be 
  4947.       ignored.  So you might as well specify the version if you know it. 
  4948.  
  4949.       See Configurations, for a list of supported configuration names and notes 
  4950.       on many of the configurations.  You should check the notes in that 
  4951.       section before proceeding any further with the installation of GNU CC. 
  4952.  
  4953.       There are four additional options you can specify independently to 
  4954.       describe variant hardware and software configurations.  These are 
  4955.       `--with-gnu-as', `--with-gnu-ld', `--with-stabs' and `--nfp'. 
  4956.  
  4957.       `--with-gnu-as' 
  4958.                      If you will use GNU CC with the GNU assembler (GAS), you 
  4959.                      should declare this by using the `--with-gnu-as' option 
  4960.                      when you run `configure'. 
  4961.  
  4962.                      Using this option does not install GAS.  It only modifies 
  4963.                      the output of GNU CC to work with GAS.  Building and 
  4964.                      installing GAS is up to you. 
  4965.  
  4966.                      Conversely, if you do not wish to use GAS and do not 
  4967.                      specify `--with-gnu-as' when building GNU CC, it is up to 
  4968.                      you to make sure that GAS is not installed.  GNU CC 
  4969.                      searches for a program named as in various directories; if 
  4970.                      the program it finds is GAS, then it runs GAS.  If you are 
  4971.                      not sure where GNU CC finds the assembler it is using, try 
  4972.                      specifying `-v' when you run it. 
  4973.  
  4974.                      The systems where it makes a difference whether you use 
  4975.                      GAS are 
  4976.                      `hppa1.0-any-any', `hppa1.1-any-any', `i386-any-sysv', 
  4977.                      `i386-any-isc', 
  4978.                      `i860-any-bsd', `m68k-bull-sysv', `m68k-hp-hpux', 
  4979.                      `m68k-sony-bsd', 
  4980.                      `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv', 
  4981.                      `any-lynx-lynxos', and `mips-any'). On any other system, 
  4982.                      `--with-gnu-as' has no effect. 
  4983.  
  4984.                      On the systems listed above (except for the HP-PA, for ISC 
  4985.                      on the 386, and for `mips-sgi-irix5.*'), if you use GAS, 
  4986.                      you should also use the GNU linker (and specify 
  4987.                      `--with-gnu-ld'). 
  4988.  
  4989.       `--with-gnu-ld' 
  4990.                      Specify the option `--with-gnu-ld' if you plan to use the 
  4991.                      GNU linker with GNU CC. 
  4992.  
  4993.                      This option does not cause the GNU linker to be installed; 
  4994.                      it just modifies the behavior of GNU CC to work with the 
  4995.                      GNU linker. Specifically, it inhibits the installation of 
  4996.                      collect2, a program which otherwise serves as a front-end 
  4997.                      for the system's linker on most configurations. 
  4998.  
  4999.       `--with-stabs' 
  5000.                      On MIPS based systems and on Alphas, you must specify 
  5001.                      whether you want GNU CC to create the normal ECOFF 
  5002.                      debugging format, or to use BSD-style stabs passed through 
  5003.                      the ECOFF symbol table.  The normal ECOFF debug format 
  5004.                      cannot fully handle languages other than C.  BSD stabs 
  5005.                      format can handle other languages, but it only works with 
  5006.                      the GNU debugger GDB. 
  5007.  
  5008.                      Normally, GNU CC uses the ECOFF debugging format by 
  5009.                      default; if you prefer BSD stabs, specify `--with-stabs' 
  5010.                      when you configure GNU CC. 
  5011.  
  5012.                      No matter which default you choose when you configure GNU 
  5013.                      CC, the user can use the `-gcoff' and `-gstabs+' options 
  5014.                      to specify explicitly the debug format for a particular 
  5015.                      compilation. 
  5016.  
  5017.                      `--with-stabs' is meaningful on the ISC system on the 386, 
  5018.                      also, if `--with-gas' is used.  It selects use of stabs 
  5019.                      debugging information embedded in COFF output.  This kind 
  5020.                      of debugging information supports C++ well; ordinary COFF 
  5021.                      debugging information does not. 
  5022.  
  5023.                      `--with-stabs' is also meaningful on 386 systems running 
  5024.                      SVR4.  It selects use of stabs debugging information 
  5025.                      embedded in ELF output.  The C++ compiler currently 
  5026.                      (2.6.0) does not support the DWARF debugging information 
  5027.                      normally used on 386 SVR4 platforms; stabs provide a 
  5028.                      workable alternative.  This requires gas and gdb, as the 
  5029.                      normal SVR4 tools can not generate or interpret stabs. 
  5030.  
  5031.       `--nfp' 
  5032.                      On certain systems, you must specify whether the machine 
  5033.                      has a floating point unit.  These systems include 
  5034.                      `m68k-sun-sunosn' and `m68k-isi-bsd'.  On any other 
  5035.                      system, `--nfp' currently has no effect, though perhaps 
  5036.                      there are other systems where it could usefully make a 
  5037.                      difference. 
  5038.  
  5039.       The `configure' script searches subdirectories of the source directory 
  5040.       for other compilers that are to be integrated into GNU CC. The GNU 
  5041.       compiler for C++, called G++ is in a subdirectory named `cp'. 
  5042.       `configure' inserts rules into `Makefile' to build all of those 
  5043.       compilers. 
  5044.  
  5045.       Here we spell out what files will be set up by configure.  Normally you 
  5046.       need not be concerned with these files. 
  5047.  
  5048.           A file named `config.h' is created that contains a `#include' of the 
  5049.            top-level config file for the machine you will run the compiler on 
  5050.            (see Config).  This file is responsible for defining information 
  5051.            about the host machine.  It includes `tm.h'. 
  5052.  
  5053.            The top-level config file is located in the subdirectory `config'. 
  5054.            Its name is always `xm-something.h'; usually `xm-machine.h', but 
  5055.            there are some exceptions. 
  5056.  
  5057.            If your system does not support symbolic links, you might want to 
  5058.            set up `config.h' to contain a `#include' command which refers to 
  5059.            the appropriate file. 
  5060.  
  5061.           A file named `tconfig.h' is created which includes the top-level 
  5062.            config file for your target machine.  This is used for compiling 
  5063.            certain programs to run on that machine. 
  5064.  
  5065.           A file named `tm.h' is created which includes the 
  5066.            machine-description macro file for your target machine.  It should 
  5067.            be in the subdirectory `config' and its name is often `machine.h'. 
  5068.  
  5069.           The command file `configure' also constructs the file `Makefile' by 
  5070.            adding some text to the template file `Makefile.in'.  The additional 
  5071.            text comes from files in the `config' directory, named `t-target' 
  5072.            and `x-host'.  If these files do not exist, it means nothing needs 
  5073.            to be added for a given target or host. 
  5074.  
  5075.    4. The standard directory for installing GNU CC is `/usr/local/lib'. If you 
  5076.       want to install its files somewhere else, specify `--prefix=dir' when you 
  5077.       run `configure'.  Here dir is a directory name to use instead of 
  5078.       `/usr/local' for all purposes with one exception: the directory 
  5079.       `/usr/local/include' is searched for header files no matter where you 
  5080.       install the compiler.  To override this name, use the --local-prefix 
  5081.       option below. 
  5082.  
  5083.    5. Specify `--local-prefix=dir' if you want the compiler to search directory 
  5084.       `dir/include' for locally installed header files instead of 
  5085.       `/usr/local/include'. 
  5086.  
  5087.       You should specify `--local-prefix' *only* if your site has a different 
  5088.       convention (not `/usr/local') for where to put site-specific files. 
  5089.  
  5090.       *Do not* specify `/usr' as the `--local-prefix'!  The directory you use 
  5091.       for `--local-prefix' *must not* contain any of the system's standard 
  5092.       header files.  If it did contain them, certain programs would be 
  5093.       miscompiled (including GNU Emacs, on certain targets), because this would 
  5094.       override and nullify the header file corrections made by the fixincludes 
  5095.       script. 
  5096.  
  5097.    6. Make sure the Bison parser generator is installed.  (This is unnecessary 
  5098.       if the Bison output files `c-parse.c' and `cexp.c' are more recent than 
  5099.       `c-parse.y' and `cexp.y' and you do not plan to change the `.y' files.) 
  5100.  
  5101.       Bison versions older than Sept 8, 1988 will produce incorrect output for 
  5102.       `c-parse.c'. 
  5103.  
  5104.    7. If you have chosen a configuration for GNU CC which requires other GNU 
  5105.       tools (such as GAS or the GNU linker) instead of the standard system 
  5106.       tools, install the required tools in the build directory under the names 
  5107.       `as', `ld' or whatever is appropriate.  This will enable the compiler to 
  5108.       find the proper tools for compilation of the program `enquire'. 
  5109.  
  5110.       Alternatively, you can do subsequent compilation using a value of the 
  5111.       PATH environment variable such that the necessary GNU tools come before 
  5112.       the standard system tools. 
  5113.  
  5114.    8. Build the compiler.  Just type `make LANGUAGES=c' in the compiler 
  5115.       directory. 
  5116.  
  5117.       `LANGUAGES=c' specifies that only the C compiler should be compiled.  The 
  5118.       makefile normally builds compilers for all the supported languages; 
  5119.       currently, C, C++ and Objective C.  However, C is the only language that 
  5120.       is sure to work when you build with other non-GNU C compilers.  In 
  5121.       addition, building anything but C at this stage is a waste of time. 
  5122.  
  5123.       In general, you can specify the languages to build by typing the argument 
  5124.       `LANGUAGES="list"', where list is one or more words from the list `c', 
  5125.       `c++', and `objective-c'.  If you have any additional GNU compilers as 
  5126.       subdirectories of the GNU CC source directory, you may also specify their 
  5127.       names in this list. 
  5128.  
  5129.       Ignore any warnings you may see about ``statement not reached'' in 
  5130.       `insn-emit.c'; they are normal.  Also, warnings about ``unknown escape 
  5131.       sequence'' are normal in `genopinit.c' and perhaps some other files. 
  5132.       Likewise, you should ignore warnings about ``constant is so large that it 
  5133.       is unsigned'' in `insn-emit.c' and `insn-recog.c' and a warning about a 
  5134.       comparison always being zero in `enquire.o'.  Any other compilation 
  5135.       errors may represent bugs in the port to your machine or operating 
  5136.       system, and should be investigated and reported (see Bugs). 
  5137.  
  5138.       Some commercial compilers fail to compile GNU CC because they have bugs 
  5139.       or limitations.  For example, the Microsoft compiler is said to run out 
  5140.       of macro space.  Some Ultrix compilers run out of expression space; then 
  5141.       you need to break up the statement where the problem happens. 
  5142.  
  5143.    9. If you are building a cross-compiler, stop here.  See Cross-Compiler. 
  5144.  
  5145.   10. Move the first-stage object files and executables into a subdirectory 
  5146.       with this command: 
  5147.  
  5148.             make stage1
  5149.  
  5150.       The files are moved into a subdirectory named `stage1'. Once installation 
  5151.       is complete, you may wish to delete these files with rm -r stage1. 
  5152.  
  5153.   11. If you have chosen a configuration for GNU CC which requires other GNU 
  5154.       tools (such as GAS or the GNU linker) instead of the standard system 
  5155.       tools, install the required tools in the `stage1' subdirectory under the 
  5156.       names `as', `ld' or whatever is appropriate.  This will enable the stage 
  5157.       1 compiler to find the proper tools in the following stage. 
  5158.  
  5159.       Alternatively, you can do subsequent compilation using a value of the 
  5160.       PATH environment variable such that the necessary GNU tools come before 
  5161.       the standard system tools. 
  5162.  
  5163.   12. Recompile the compiler with itself, with this command: 
  5164.  
  5165.             make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2"
  5166.  
  5167.       This is called making the stage 2 compiler. 
  5168.  
  5169.       The command shown above builds compilers for all the supported languages. 
  5170.       If you don't want them all, you can specify the languages to build by 
  5171.       typing the argument `LANGUAGES="list"'.  list should contain one or more 
  5172.       words from the list `c', `c++', `objective-c', and `proto'.  Separate the 
  5173.       words with spaces. `proto' stands for the programs protoize and 
  5174.       unprotoize; they are not a separate language, but you use LANGUAGES to 
  5175.       enable or disable their installation. 
  5176.  
  5177.       If you are going to build the stage 3 compiler, then you might want to 
  5178.       build only the C language in stage 2. 
  5179.  
  5180.       Once you have built the stage 2 compiler, if you are short of disk space, 
  5181.       you can delete the subdirectory `stage1'. 
  5182.  
  5183.       On a 68000 or 68020 system lacking floating point hardware, unless you 
  5184.       have selected a `tm.h' file that expects by default that there is no such 
  5185.       hardware, do this instead: 
  5186.  
  5187.             make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2 -msoft-float"
  5188.  
  5189.   13. If you wish to test the compiler by compiling it with itself one more 
  5190.       time, install any other necessary GNU tools (such as GAS or the GNU 
  5191.       linker) in the `stage2' subdirectory as you did in the `stage1' 
  5192.       subdirectory, then do this: 
  5193.  
  5194.             make stage2
  5195.             make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2"
  5196.  
  5197.       This is called making the stage 3 compiler.  Aside from the `-B' option, 
  5198.       the compiler options should be the same as when you made the stage 2 
  5199.       compiler.  But the LANGUAGES option need not be the same.  The command 
  5200.       shown above builds compilers for all the supported languages; if you 
  5201.       don't want them all, you can specify the languages to build by typing the 
  5202.       argument `LANGUAGES="list"', as described above. 
  5203.  
  5204.       If you do not have to install any additional GNU tools, you may use the 
  5205.       command 
  5206.  
  5207.             make bootstrap LANGUAGES=language-list BOOT_CFLAGS=option-list
  5208.  
  5209.       instead of making `stage1', `stage2', and performing the two compiler 
  5210.       builds. 
  5211.  
  5212.   14. Then compare the latest object files with the stage 2 object files---they 
  5213.       ought to be identical, aside from time stamps (if any). 
  5214.  
  5215.       On some systems, meaningful comparison of object files is impossible; 
  5216.       they always appear ``different.''  This is currently true on Solaris and 
  5217.       some systems that use ELF object file format.  On some versions of Irix 
  5218.       on SGI machines and DEC Unix (OSF/1) on Alpha systems, you will not be 
  5219.       able to compare the files without specifying `-save-temps'; see the 
  5220.       description of individual systems above to see if you get comparison 
  5221.       failures.  You may have similar problems on other systems. 
  5222.  
  5223.       Use this command to compare the files: 
  5224.  
  5225.             make compare
  5226.  
  5227.       This will mention any object files that differ between stage 2 and stage 
  5228.       3.  Any difference, no matter how innocuous, indicates that the stage 2 
  5229.       compiler has compiled GNU CC incorrectly, and is therefore a potentially 
  5230.       serious bug which you should investigate and report (see Bugs). 
  5231.  
  5232.       If your system does not put time stamps in the object files, then this is 
  5233.       a faster way to compare them (using the Bourne shell): 
  5234.  
  5235.             for file in *.o; do
  5236.             cmp $file stage2/$file
  5237.             done
  5238.  
  5239.       If you have built the compiler with the `-mno-mips-tfile' option on MIPS 
  5240.       machines, you will not be able to compare the files. 
  5241.  
  5242.   15. Install the compiler driver, the compiler's passes and run-time support 
  5243.       with `make install'.  Use the same value for CC, CFLAGS and LANGUAGES 
  5244.       that you used when compiling the files that are being installed.  One 
  5245.       reason this is necessary is that some versions of Make have bugs and 
  5246.       recompile files gratuitously when you do this step.  If you use the same 
  5247.       variable values, those files will be recompiled properly. 
  5248.  
  5249.       For example, if you have built the stage 2 compiler, you can use the 
  5250.       following command: 
  5251.  
  5252.             make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="list"
  5253.  
  5254.       This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1', `cpp' 
  5255.       and `libgcc.a' in the directory `/usr/local/lib/gcc-lib/target/version', 
  5256.       which is where the compiler driver program looks for them.  Here target 
  5257.       is the target machine type specified when you ran `configure', and 
  5258.       version is the version number of GNU CC.  This naming scheme permits 
  5259.       various versions and/or cross-compilers to coexist. 
  5260.  
  5261.       This also copies the driver program `xgcc' into `/usr/local/bin/gcc', so 
  5262.       that it appears in typical execution search paths. 
  5263.  
  5264.       On some systems, this command causes recompilation of some files.  This 
  5265.       is usually due to bugs in make.  You should either ignore this problem, 
  5266.       or use GNU Make. 
  5267.  
  5268.       *Warning: there is a bug in alloca in the Sun library.  To avoid this 
  5269.       bug, be sure to install the executables of GNU CC that were compiled by 
  5270.       GNU CC.  (That is, the executables from stage 2 or 3, not stage 1.)  They 
  5271.       use alloca as a built-in function and never the one in the library.* 
  5272.  
  5273.       (It is usually better to install GNU CC executables from stage 2 or 3, 
  5274.       since they usually run faster than the ones compiled with some other 
  5275.       compiler.) 
  5276.  
  5277.   16. If you're going to use C++, it's likely that you need to also install the 
  5278.       libg++ distribution.  It should be available from the same place where 
  5279.       you got the GNU C distribution.  Just as GNU C does not distribute a C 
  5280.       runtime library, it also does not include a C++ run-time library.  All 
  5281.       I/O functionality, special class libraries, etc., are available in the 
  5282.       libg++ distribution. 
  5283.  
  5284.  
  5285. ΓòÉΓòÉΓòÉ 9.1. Configurations Supported by GNU CC ΓòÉΓòÉΓòÉ
  5286.  
  5287. Here are the possible CPU types: 
  5288.  
  5289. 1750a, a29k, alpha, arm, cn, clipper, dsp16xx, elxsi, h8300, hppa1.0, hppa1.1, 
  5290. i370, i386, i486, i586, i860, i960, m68000, m68k, m88k, mips, mipsel, mips64, 
  5291. mips64el, ns32k, powerpc, powerpcle, pyramid, romp, rs6000, sh, sparc, 
  5292. sparclite, sparc64, vax, we32k. 
  5293.  
  5294. Here are the recognized company names.  As you can see, customary abbreviations 
  5295. are used rather than the longer official names. 
  5296.  
  5297. acorn, alliant, altos, apollo, att, bull, cbm, convergent, convex, crds, dec, 
  5298. dg, dolphin, elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi, mips, 
  5299. motorola, ncr, next, ns, omron, plexus, sequent, sgi, sony, sun, tti, unicom, 
  5300. wrs. 
  5301.  
  5302. The company name is meaningful only to disambiguate when the rest of the 
  5303. information supplied is insufficient.  You can omit it, writing just 
  5304. `cpu-system', if it is not needed.  For example, `vax-ultrix4.2' is equivalent 
  5305. to `vax-dec-ultrix4.2'. 
  5306.  
  5307. Here is a list of system types: 
  5308.  
  5309. 386bsd, aix, acis, amigados, aos, aout, bosx, bsd, clix, coff, ctix, cxux, 
  5310. dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, gnu/linux, 
  5311. hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs, netbsd, 
  5312. newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim, solaris, 
  5313. sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta, vxworks, 
  5314. winnt, xenix. 
  5315.  
  5316. You can omit the system type; then `configure' guesses the operating system 
  5317. from the CPU and company. 
  5318.  
  5319. You can add a version number to the system type; this may or may not make a 
  5320. difference.  For example, you can write `bsd4.3' or `bsd4.4' to distinguish 
  5321. versions of BSD.  In practice, the version number is most needed for `sysv3' 
  5322. and `sysv4', which are often treated differently. 
  5323.  
  5324. If you specify an impossible combination such as `i860-dg-vms', then you may 
  5325. get an error message from `configure', or it may ignore part of the information 
  5326. and do the best it can with the rest. `configure' always prints the canonical 
  5327. name for the alternative that it used.  GNU CC does not support all possible 
  5328. alternatives. 
  5329.  
  5330. Often a particular model of machine has a name.  Many machine names are 
  5331. recognized as aliases for CPU/company combinations.  Thus, the machine name 
  5332. `sun3', mentioned above, is an alias for `m68k-sun'. Sometimes we accept a 
  5333. company name as a machine name, when the name is popularly used for a 
  5334. particular machine.  Here is a table of the known machine names: 
  5335.  
  5336. 3300, 3b1, 3bn, 7300, altos3068, altos, apollo68, att-7300, balance, convex-cn, 
  5337. crds, decstation-3100, decstation, delta, encore, fx2800, gmicro, hp7nn, hp8nn, 
  5338. hp9k2nn, hp9k3nn, hp9k7nn, hp9k8nn, iris4d, iris, isi68, m3230, magnum, merlin, 
  5339. miniframe, mmax, news-3600, news800, news, next, pbd, pc532, pmax, powerpc, 
  5340. powerpcle, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3, sun4, symmetry, 
  5341. tower-32, tower. 
  5342.  
  5343. Remember that a machine name specifies both the cpu type and the company name. 
  5344. If you want to install your own homemade configuration files, you can use 
  5345. `local' as the company name to access them.  If you use configuration 
  5346. `cpu-local', the configuration name without the cpu prefix is used to form the 
  5347. configuration file names. 
  5348.  
  5349. Thus, if you specify `m68k-local', configuration uses files `m68k.md', 
  5350. `local.h', `m68k.c', `xm-local.h', `t-local', and `x-local', all in the 
  5351. directory `config/m68k'. 
  5352.  
  5353. Here is a list of configurations that have special treatment or special things 
  5354. you must know: 
  5355.  
  5356.  `1750a-*-*' 
  5357.            MIL-STD-1750A processors. 
  5358.  
  5359.            Starting with GCC 2.6.1, the MIL-STD-1750A cross configuration no 
  5360.            longer supports the Tektronix Assembler, but instead produces output 
  5361.            for as1750, an assembler/linker available under the GNU Public 
  5362.            License for the 1750A. Contact kellogg@space.otn.dasa.de for more 
  5363.            details on obtaining `as1750'.  A similarly licensed simulator for 
  5364.            the 1750A is available from same address. 
  5365.  
  5366.            You should ignore a fatal error during the building of libgcc 
  5367.            (libgcc is not yet implemented for the 1750A.) 
  5368.  
  5369.            The as1750 assembler requires the file `ms1750.inc', which is found 
  5370.            in the directory `config/1750a'. 
  5371.  
  5372.            GNU CC produced the same sections as the Fairchild F9450 C Compiler, 
  5373.            namely: 
  5374.  
  5375.            Normal 
  5376.                           The program code section. 
  5377.  
  5378.            Static 
  5379.                           The read/write (RAM) data section. 
  5380.  
  5381.            Konst 
  5382.                           The read-only (ROM) constants section. 
  5383.  
  5384.            Init 
  5385.                           Initialization section (code to copy KREL to SREL). 
  5386.  
  5387.            The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16). 
  5388.            This means that type `char' is represented with a 16-bit word per 
  5389.            character. The 1750A's "Load/Store Upper/Lower Byte" instructions 
  5390.            are not used by GNU CC. 
  5391.  
  5392.  `alpha-*-osf1' 
  5393.            Systems using processors that implement the DEC Alpha architecture 
  5394.            and are running the DEC Unix (OSF/1) operating system, for example 
  5395.            the DEC Alpha AXP systems.  (VMS on the Alpha is not currently 
  5396.            supported by GNU CC.) 
  5397.  
  5398.            GNU CC writes a `.verstamp' directive to the assembler output file 
  5399.            unless it is built as a cross-compiler.  It gets the version to use 
  5400.            from the system header file `/usr/include/stamp.h'.  If you install 
  5401.            a new version of DEC Unix, you should rebuild GCC to pick up the new 
  5402.            version stamp. 
  5403.  
  5404.            Note that since the Alpha is a 64-bit architecture, cross-compilers 
  5405.            from 32-bit machines will not generate code as efficient as that 
  5406.            generated when the compiler is running on a 64-bit machine because 
  5407.            many optimizations that depend on being able to represent a word on 
  5408.            the target in an integral value on the host cannot be performed. 
  5409.            Building cross-compilers on the Alpha for 32-bit machines has only 
  5410.            been tested in a few cases and may not work properly. 
  5411.  
  5412.            make compare may fail on old versions of DEC Unix unless you add 
  5413.            `-save-temps' to CFLAGS.  On these systems, the name of the 
  5414.            assembler input file is stored in the object file, and that makes 
  5415.            comparison fail if it differs between the stage1 and stage2 
  5416.            compilations.  The option `-save-temps' forces a fixed name to be 
  5417.            used for the assembler input file, instead of a randomly chosen name 
  5418.            in `/tmp'.  Do not add `-save-temps' unless the comparisons fail 
  5419.            without that option.  If you add `-save-temps', you will have to 
  5420.            manually delete the `.i' and `.s' files after each series of 
  5421.            compilations. 
  5422.  
  5423.            GNU CC now supports both the native (ECOFF) debugging format used by 
  5424.            DBX and GDB and an encapsulated STABS format for use only with GDB. 
  5425.            See the discussion of the `--with-stabs' option of `configure' above 
  5426.            for more information on these formats and how to select them. 
  5427.  
  5428.            There is a bug in DEC's assembler that produces incorrect line 
  5429.            numbers for ECOFF format when the `.align' directive is used.  To 
  5430.            work around this problem, GNU CC will not emit such alignment 
  5431.            directives while writing ECOFF format debugging information even if 
  5432.            optimization is being performed.  Unfortunately, this has the very 
  5433.            undesirable side-effect that code addresses when `-O' is specified 
  5434.            are different depending on whether or not `-g' is also specified. 
  5435.  
  5436.            To avoid this behavior, specify `-gstabs+' and use GDB instead of 
  5437.            DBX.  DEC is now aware of this problem with the assembler and hopes 
  5438.            to provide a fix shortly. 
  5439.  
  5440.  ` arm' 
  5441.            Advanced RISC Machines ARM-family processors.  These are often used 
  5442.            in embedded applications.  There are no standard Unix 
  5443.            configurations. This configuration corresponds to the basic 
  5444.            instruction sequences and will produce a.out format object modules. 
  5445.  
  5446.            You may need to make a variant of the file `arm.h' for your 
  5447.            particular configuration. 
  5448.  
  5449.  `arm-*-riscix' 
  5450.            The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD 
  5451.            Unix.  If you are running a version of RISC iX prior to 1.2 then you 
  5452.            must specify the version number during configuration.  Note that the 
  5453.            assembler shipped with RISC iX does not support stabs debugging 
  5454.            information; a new version of the assembler, with stabs support 
  5455.            included, is now available from Acorn. 
  5456.  
  5457.  `a29k' 
  5458.            AMD Am29k-family processors.  These are normally used in embedded 
  5459.            applications.  There are no standard Unix configurations. This 
  5460.            configuration corresponds to AMD's standard calling sequence and 
  5461.            binary interface and is compatible with other 29k tools. 
  5462.  
  5463.            You may need to make a variant of the file `a29k.h' for your 
  5464.            particular configuration. 
  5465.  
  5466.  `a29k-*-bsd' 
  5467.            AMD Am29050 used in a system running a variant of BSD Unix. 
  5468.  
  5469.  `decstation-*' 
  5470.            DECstations can support three different personalities: Ultrix, DEC 
  5471.            OSF/1, and OSF/rose.  To configure GCC for these platforms use the 
  5472.            following configurations: 
  5473.  
  5474.            `decstation-ultrix' 
  5475.                           Ultrix configuration. 
  5476.  
  5477.            `decstation-osf1' 
  5478.                           Dec's version of OSF/1. 
  5479.  
  5480.            `decstation-osfrose' 
  5481.                           Open Software Foundation reference port of OSF/1 
  5482.                           which uses the OSF/rose object file format instead of 
  5483.                           ECOFF.  Normally, you would not select this 
  5484.                           configuration. 
  5485.  
  5486.            The MIPS C compiler needs to be told to increase its table size for 
  5487.            switch statements with the `-Wf,-XNg1500' option in order to compile 
  5488.            `cp/parse.c'.  If you use the `-O2' optimization option, you also 
  5489.            need to use `-Olimit 3000'. Both of these options are automatically 
  5490.            generated in the `Makefile' that the shell script `configure' 
  5491.            builds. If you override the CC make variable and use the MIPS 
  5492.            compilers, you may need to add `-Wf,-XNg1500 -Olimit 3000'. 
  5493.  
  5494.  `elxsi-elxsi-bsd' 
  5495.            The Elxsi's C compiler has known limitations that prevent it from 
  5496.            compiling GNU C.  Please contact mrs@cygnus.com for more details. 
  5497.  
  5498.  `dsp16xx' 
  5499.            A port to the AT&T DSP1610 family of processors. 
  5500.  
  5501.  `h8300-*-*' 
  5502.            The calling convention and structure layout has changed in release 
  5503.            2.6. All code must be recompiled.  The calling convention now passes 
  5504.            the first three arguments in function calls in registers. 
  5505.            Structures are no longer a multiple of 2 bytes. 
  5506.  
  5507.  `hppa*-*-*' 
  5508.            There are several variants of the HP-PA processor which run a 
  5509.            variety of operating systems.  GNU CC must be configured to use the 
  5510.            correct processor type and operating system, or GNU CC will not 
  5511.            function correctly. The easiest way to handle this problem is to not 
  5512.            specify a target when configuring GNU CC, the `configure' script 
  5513.            will try to automatically determine the right processor type and 
  5514.            operating system. 
  5515.  
  5516.            `-g' does not work on HP-UX, since that system uses a peculiar 
  5517.            debugging format which GNU CC does not know about.  However, `-g' 
  5518.            will work if you also use GAS and GDB in conjunction with GCC.  We 
  5519.            highly recommend using GAS for all HP-PA configurations. 
  5520.  
  5521.            You should be using GAS-2.6 (or later) along with GDB-4.16 (or 
  5522.            later).  These can be retrieved from all the traditional GNU ftp 
  5523.            archive sites. 
  5524.  
  5525.            GAS will need to be installed into a directory before /bin, 
  5526.            /usr/bin, and /usr/ccs/bin in your search path.  You should install 
  5527.            GAS before you build GNU CC. 
  5528.  
  5529.            To enable debugging, you must configure GNU CC with the 
  5530.            `--with-gnu-as' option before building. 
  5531.  
  5532.  `i370-*-*' 
  5533.            This port is very preliminary and has many known bugs.  We hope to 
  5534.            have a higher-quality port for this machine soon. 
  5535.  
  5536.  `i386-*-linuxoldld' 
  5537.            Use this configuration to generate a.out binaries on Linux-based GNU 
  5538.            systems, if you do not have gas/binutils version 2.5.2 or later 
  5539.            installed.  This is an obsolete configuration. 
  5540.  
  5541.  `i386-*-linuxaout' 
  5542.            Use this configuration to generate a.out binaries on Linux-based GNU 
  5543.            systems.  This configuration is being superseded.  You must use 
  5544.            gas/binutils version 2.5.2 or later. 
  5545.  
  5546.  `i386-*-linux' 
  5547.            Use this configuration to generate ELF binaries on Linux-based GNU 
  5548.            systems.  You must use gas/binutils version 2.5.2 or later. 
  5549.  
  5550.  `i386-*-sco' 
  5551.            Compilation with RCC is recommended.  Also, it may be a good idea to 
  5552.            link with GNU malloc instead of the malloc that comes with the 
  5553.            system. 
  5554.  
  5555.  `i386-*-sco3.2v4' 
  5556.            Use this configuration for SCO release 3.2 version 4. 
  5557.  
  5558.  `i386-*-isc' 
  5559.            It may be a good idea to link with GNU malloc instead of the malloc 
  5560.            that comes with the system. 
  5561.  
  5562.            In ISC version 4.1, `sed' core dumps when building `deduced.h'.  Use 
  5563.            the version of `sed' from version 4.0. 
  5564.  
  5565.  `i386-*-esix' 
  5566.            It may be good idea to link with GNU malloc instead of the malloc 
  5567.            that comes with the system. 
  5568.  
  5569.  `i386-ibm-aix' 
  5570.            You need to use GAS version 2.1 or later, and and LD from GNU 
  5571.            binutils version 2.2 or later. 
  5572.  
  5573.  `i386-sequent-bsd' 
  5574.            Go to the Berkeley universe before compiling.  In addition, you 
  5575.            probably need to create a file named `string.h' containing just one 
  5576.            line: `#include <strings.h>'. 
  5577.  
  5578.  `i386-sequent-ptx1*' 
  5579.            Sequent DYNIX/ptx 1.x. 
  5580.  
  5581.  `i386-sequent-ptx2*' 
  5582.            Sequent DYNIX/ptx 2.x. 
  5583.  
  5584.  `i386-sun-sunos4' 
  5585.            You may find that you need another version of GNU CC to begin 
  5586.            bootstrapping with, since the current version when built with the 
  5587.            system's own compiler seems to get an infinite loop compiling part 
  5588.            of `libgcc2.c'.  GNU CC version 2 compiled with GNU CC (any version) 
  5589.            seems not to have this problem. 
  5590.  
  5591.            See Sun Install, for information on installing GNU CC on Sun 
  5592.            systems. 
  5593.  
  5594.  `i[345]86-*-winnt3.5' 
  5595.            This version requires a GAS that has not let been released.  Until 
  5596.            it is, you can get a prebuilt binary version via anonymous ftp from 
  5597.            `cs.washington.edu:pub/gnat' or `cs.nyu.edu:pub/gnat'. You must also 
  5598.            use the Microsoft header files from the Windows NT 3.5 SDK. Find 
  5599.            these on the CDROM in the `/mstools/h' directory dated 9/4/94.  You 
  5600.            must use a fixed version of Microsoft linker made especially for NT 
  5601.            3.5, which is also is available on the NT 3.5 SDK CDROM.  If you do 
  5602.            not have this linker, can you also use the linker from Visual C/C++ 
  5603.            1.0 or 2.0. 
  5604.  
  5605.            Installing GNU CC for NT builds a wrapper linker, called `ld.exe', 
  5606.            which mimics the behaviour of Unix `ld' in the specification of 
  5607.            libraries (`-L' and `-l').  `ld.exe' looks for both Unix and 
  5608.            Microsoft named libraries.  For example, if you specify `-lfoo', 
  5609.            `ld.exe' will look first for `libfoo.a' and then for `foo.lib'. 
  5610.  
  5611.            You may install GNU CC for Windows NT in one of two ways, depending 
  5612.            on whether or not you have a Unix-like shell and various Unix-like 
  5613.            utilities. 
  5614.  
  5615.              1. If you do not have a Unix-like shell and few Unix-like 
  5616.                 utilities, you will use a DOS style batch script called 
  5617.                 `configure.bat'.  Invoke it as configure winnt from an MSDOS 
  5618.                 console window or from the program manager dialog box. 
  5619.                 `configure.bat' assumes you have already installed and have in 
  5620.                 your path a Unix-like `sed' program which is used to create a 
  5621.                 working `Makefile' from `Makefile.in'. 
  5622.  
  5623.                 `Makefile' uses the Microsoft Nmake program maintenance utility 
  5624.                 and the Visual C/C++ V8.00 compiler to build GNU CC.  You need 
  5625.                 only have the utilities `sed' and `touch' to use this 
  5626.                 installation method, which only automatically builds the 
  5627.                 compiler itself.  You must then examine what `fixinc.winnt' 
  5628.                 does, edit the header files by hand and build `libgcc.a' 
  5629.                 manually. 
  5630.  
  5631.              2. The second type of installation assumes you are running a 
  5632.                 Unix-like shell, have a complete suite of Unix-like utilities 
  5633.                 in your path, and have a previous version of GNU CC already 
  5634.                 installed, either through building it via the above 
  5635.                 installation method or acquiring a pre-built binary.  In this 
  5636.                 case, use the `configure' script in the normal fashion. 
  5637.  
  5638.  `i860-intel-osf1' 
  5639.            This is the Paragon. If you have version 1.0 of the operating 
  5640.            system, see Installation Problems, for special things you need to do 
  5641.            to compensate for peculiarities in the system. 
  5642.  
  5643.  `*-lynx-lynxos' 
  5644.            LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as 
  5645.            `/bin/gcc'.  You should compile with this instead of `/bin/cc'. You 
  5646.            can tell GNU CC to use the GNU assembler and linker, by specifying 
  5647.            `--with-gnu-as --with-gnu-ld' when configuring.  These will produce 
  5648.            COFF format object files and executables;  otherwise GNU CC will use 
  5649.            the installed tools, which produce a.out format executables. 
  5650.  
  5651.  `m68000-hp-bsd' 
  5652.            HP 9000 series 200 running BSD.  Note that the C compiler that comes 
  5653.            with this system cannot compile GNU CC; contact law@cs.utah.edu to 
  5654.            get binaries of GNU CC for bootstrapping. 
  5655.  
  5656.  `m68k-altos' 
  5657.            Altos 3068.  You must use the GNU assembler, linker and debugger. 
  5658.            Also, you must fix a kernel bug.  Details in the file 
  5659.            `README.ALTOS'. 
  5660.  
  5661.  `m68k-att-sysv' 
  5662.            AT&T 3b1, a.k.a. 7300 PC.  Special procedures are needed to compile 
  5663.            GNU CC with this machine's standard C compiler, due to bugs in that 
  5664.            compiler.  You can bootstrap it more easily with previous versions 
  5665.            of GNU CC if you have them. 
  5666.  
  5667.            Installing GNU CC on the 3b1 is difficult if you do not already have 
  5668.            GNU CC running, due to bugs in the installed C compiler.  However, 
  5669.            the following procedure might work.  We are unable to test it. 
  5670.  
  5671.              1. Comment out the `#include "config.h"' line on line 37 of 
  5672.                 `cccp.c' and do `make cpp'.  This makes a preliminary version 
  5673.                 of GNU cpp. 
  5674.  
  5675.              2. Save the old `/lib/cpp' and copy the preliminary GNU cpp to 
  5676.                 that file name. 
  5677.  
  5678.              3. Undo your change in `cccp.c', or reinstall the original 
  5679.                 version, and do `make cpp' again. 
  5680.  
  5681.              4. Copy this final version of GNU cpp into `/lib/cpp'. 
  5682.  
  5683.              5. Replace every occurrence of obstack_free in the file `tree.c' 
  5684.                 with _obstack_free. 
  5685.  
  5686.              6. Run make to get the first-stage GNU CC. 
  5687.  
  5688.              7. Reinstall the original version of `/lib/cpp'. 
  5689.  
  5690.              8. Now you can compile GNU CC with itself and install it in the 
  5691.                 normal fashion. 
  5692.  
  5693.  `m68k-bull-sysv' 
  5694.            Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU 
  5695.            CC works either with native assembler or GNU assembler. You can use 
  5696.            GNU assembler with native coff generation by providing 
  5697.            `--with-gnu-as' to the configure script or use GNU assembler with 
  5698.            dbx-in-coff encapsulation by providing `--with-gnu-as --stabs'. For 
  5699.            any problem with native assembler or for availability of the DPX/2 
  5700.            port of GAS, contact F.Pierresteguy@frcl.bull.fr. 
  5701.  
  5702.  `m68k-crds-unox' 
  5703.            Use `configure unos' for building on Unos. 
  5704.  
  5705.            The Unos assembler is named casm instead of as.  For some strange 
  5706.            reason linking `/bin/as' to `/bin/casm' changes the behavior, and 
  5707.            does not work.  So, when installing GNU CC, you should install the 
  5708.            following script as `as' in the subdirectory where the passes of GCC 
  5709.            are installed: 
  5710.  
  5711.                       #!/bin/sh
  5712.                       casm $*
  5713.  
  5714.            The default Unos library is named `libunos.a' instead of `libc.a'. 
  5715.            To allow GNU CC to function, either change all references to `-lc' 
  5716.            in `gcc.c' to `-lunos' or link `/lib/libc.a' to `/lib/libunos.a'. 
  5717.  
  5718.            When compiling GNU CC with the standard compiler, to overcome bugs 
  5719.            in the support of alloca, do not use `-O' when making stage 2. Then 
  5720.            use the stage 2 compiler with `-O' to make the stage 3 compiler. 
  5721.            This compiler will have the same characteristics as the usual stage 
  5722.            2 compiler on other systems.  Use it to make a stage 4 compiler and 
  5723.            compare that with stage 3 to verify proper compilation. 
  5724.  
  5725.            (Perhaps simply defining ALLOCA in `x-crds' as described in the 
  5726.            comments there will make the above paragraph superfluous.  Please 
  5727.            inform us of whether this works.) 
  5728.  
  5729.            Unos uses memory segmentation instead of demand paging, so you will 
  5730.            need a lot of memory.  5 Mb is barely enough if no other tasks are 
  5731.            running. If linking `cc1' fails, try putting the object files into a 
  5732.            library and linking from that library. 
  5733.  
  5734.  `m68k-hp-hpux' 
  5735.            HP 9000 series 300 or 400 running HP-UX.  HP-UX version 8.0 has a 
  5736.            bug in the assembler that prevents compilation of GNU CC.  To fix 
  5737.            it, get patch PHCO_4484 from HP. 
  5738.  
  5739.            In addition, if you wish to use gas `--with-gnu-as' you must use gas 
  5740.            version 2.1 or later, and you must use the GNU linker version 2.1 or 
  5741.            later.  Earlier versions of gas relied upon a program which 
  5742.            converted the gas output into the native HP/UX format, but that 
  5743.            program has not been kept up to date.  gdb does not understand that 
  5744.            native HP/UX format, so you must use gas if you wish to use gdb. 
  5745.  
  5746.  `m68k-sun' 
  5747.            Sun 3.  We do not provide a configuration file to use the Sun FPA by 
  5748.            default, because programs that establish signal handlers for 
  5749.            floating point traps inherently cannot work with the FPA. 
  5750.  
  5751.            See Sun Install, for information on installing GNU CC on Sun 
  5752.            systems. 
  5753.  
  5754.  `m88k-*-svr3' 
  5755.            Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. 
  5756.            These systems tend to use the Green Hills C, revision 1.8.5, as the 
  5757.            standard C compiler.  There are apparently bugs in this compiler 
  5758.            that result in object files differences between stage 2 and stage 3. 
  5759.            If this happens, make the stage 4 compiler and compare it to the 
  5760.            stage 3 compiler.  If the stage 3 and stage 4 object files are 
  5761.            identical, this suggests you encountered a problem with the standard 
  5762.            C compiler; the stage 3 and 4 compilers may be usable. 
  5763.  
  5764.            It is best, however, to use an older version of GNU CC for 
  5765.            bootstrapping if you have one. 
  5766.  
  5767.  `m88k-*-dgux' 
  5768.            Motorola m88k running DG/UX.  To build 88open BCS native or cross 
  5769.            compilers on DG/UX, specify the configuration name as 
  5770.            `m88k-*-dguxbcs' and build in the 88open BCS software development 
  5771.            environment.  To build ELF native or cross compilers on DG/UX, 
  5772.            specify `m88k-*-dgux' and build in the DG/UX ELF development 
  5773.            environment. You set the software development environment by issuing 
  5774.            `sde-target' command and specifying either `m88kbcs' or 
  5775.            `m88kdguxelf' as the operand. 
  5776.  
  5777.            If you do not specify a configuration name, `configure' guesses the 
  5778.            configuration based on the current software development environment. 
  5779.  
  5780.  `m88k-tektronix-sysv3' 
  5781.            Tektronix XD88 running UTekV 3.2e.  Do not turn on optimization 
  5782.            while building stage1 if you bootstrap with the buggy Green Hills 
  5783.            compiler.  Also, The bundled LAI System V NFS is buggy so if you 
  5784.            build in an NFS mounted directory, start from a fresh reboot, or 
  5785.            avoid NFS all together. Otherwise you may have trouble getting clean 
  5786.            comparisons between stages. 
  5787.  
  5788.  `mips-mips-bsd' 
  5789.            MIPS machines running the MIPS operating system in BSD mode.  It's 
  5790.            possible that some old versions of the system lack the functions 
  5791.            memcpy, memcmp, and memset.  If your system lacks these, you must 
  5792.            remove or undo the definition of TARGET_MEM_FUNCTIONS in 
  5793.            `mips-bsd.h'. 
  5794.  
  5795.            The MIPS C compiler needs to be told to increase its table size for 
  5796.            switch statements with the `-Wf,-XNg1500' option in order to compile 
  5797.            `cp/parse.c'.  If you use the `-O2' optimization option, you also 
  5798.            need to use `-Olimit 3000'. Both of these options are automatically 
  5799.            generated in the `Makefile' that the shell script `configure' 
  5800.            builds. If you override the CC make variable and use the MIPS 
  5801.            compilers, you may need to add `-Wf,-XNg1500 -Olimit 3000'. 
  5802.  
  5803.  `mips-mips-riscos*' 
  5804.            The MIPS C compiler needs to be told to increase its table size for 
  5805.            switch statements with the `-Wf,-XNg1500' option in order to compile 
  5806.            `cp/parse.c'.  If you use the `-O2' optimization option, you also 
  5807.            need to use `-Olimit 3000'. Both of these options are automatically 
  5808.            generated in the `Makefile' that the shell script `configure' 
  5809.            builds. If you override the CC make variable and use the MIPS 
  5810.            compilers, you may need to add `-Wf,-XNg1500 -Olimit 3000'. 
  5811.  
  5812.            MIPS computers running RISC-OS can support four different 
  5813.            personalities: default, BSD 4.3, System V.3, and System V.4 (older 
  5814.            versions of RISC-OS don't support V.4).  To configure GCC for these 
  5815.            platforms use the following configurations: 
  5816.  
  5817.            `mips-mips-riscosrev' 
  5818.                           Default configuration for RISC-OS, revision rev. 
  5819.  
  5820.            `mips-mips-riscosrevbsd' 
  5821.                           BSD 4.3 configuration for RISC-OS, revision rev. 
  5822.  
  5823.            `mips-mips-riscosrevsysv4' 
  5824.                           System V.4 configuration for RISC-OS, revision rev. 
  5825.  
  5826.            `mips-mips-riscosrevsysv' 
  5827.                           System V.3 configuration for RISC-OS, revision rev. 
  5828.  
  5829.            The revision rev mentioned above is the revision of RISC-OS to use. 
  5830.            You must reconfigure GCC when going from a RISC-OS revision 4 to 
  5831.            RISC-OS revision 5.  This has the effect of avoiding a linker bug 
  5832.            (see Installation Problems, for more details). 
  5833.  
  5834.  `mips-sgi-*' 
  5835.            In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" 
  5836.            option must be installed from the CD-ROM supplied from Silicon 
  5837.            Graphics. This is found on the 2nd CD in release 4.0.1. 
  5838.  
  5839.            In order to compile GCC on an SGI running IRIX 5, the 
  5840.            "compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM 
  5841.            supplied by Silicon Graphics. 
  5842.  
  5843.            make compare may fail on version 5 of IRIX unless you add 
  5844.            `-save-temps' to CFLAGS.  On these systems, the name of the 
  5845.            assembler input file is stored in the object file, and that makes 
  5846.            comparison fail if it differs between the stage1 and stage2 
  5847.            compilations.  The option `-save-temps' forces a fixed name to be 
  5848.            used for the assembler input file, instead of a randomly chosen name 
  5849.            in `/tmp'.  Do not add `-save-temps' unless the comparisons fail 
  5850.            without that option.  If you do you `-save-temps', you will have to 
  5851.            manually delete the `.i' and `.s' files after each series of 
  5852.            compilations. 
  5853.  
  5854.            The MIPS C compiler needs to be told to increase its table size for 
  5855.            switch statements with the `-Wf,-XNg1500' option in order to compile 
  5856.            `cp/parse.c'.  If you use the `-O2' optimization option, you also 
  5857.            need to use `-Olimit 3000'. Both of these options are automatically 
  5858.            generated in the `Makefile' that the shell script `configure' 
  5859.            builds. If you override the CC make variable and use the MIPS 
  5860.            compilers, you may need to add `-Wf,-XNg1500 -Olimit 3000'. 
  5861.  
  5862.            On Irix version 4.0.5F, and perhaps on some other versions as well, 
  5863.            there is an assembler bug that reorders instructions incorrectly. 
  5864.            To work around it, specify the target configuration 
  5865.            `mips-sgi-irix4loser'.  This configuration inhibits assembler 
  5866.            optimization. 
  5867.  
  5868.            In a compiler configured with target `mips-sgi-irix4', you can turn 
  5869.            off assembler optimization by using the `-noasmopt' option.  This 
  5870.            compiler option passes the option `-O0' to the assembler, to inhibit 
  5871.            reordering. 
  5872.  
  5873.            The `-noasmopt' option can be useful for testing whether a problem 
  5874.            is due to erroneous assembler reordering.  Even if a problem does 
  5875.            not go away with `-noasmopt', it may still be due to assembler 
  5876.            reordering---perhaps GNU CC itself was miscompiled as a result. 
  5877.  
  5878.            To enable debugging under Irix 5, you must use GNU as 2.5 or later, 
  5879.            and use the `--with-gnu-as' configure option when configuring gcc. 
  5880.            GNU as is distributed as part of the binutils package. 
  5881.  
  5882.  `mips-sony-sysv' 
  5883.            Sony MIPS NEWS.  This works in NEWSOS 5.0.1, but not in 5.0.2 (which 
  5884.            uses ELF instead of COFF).  Support for 5.0.2 will probably be 
  5885.            provided soon by volunteers.  In particular, the linker does not 
  5886.            like the code generated by GCC when shared libraries are linked in. 
  5887.  
  5888.  `ns32k-encore' 
  5889.            Encore ns32000 system.  Encore systems are supported only under BSD. 
  5890.  
  5891.  `ns32k-*-genix' 
  5892.            National Semiconductor ns32000 system.  Genix has bugs in alloca and 
  5893.            malloc; you must get the compiled versions of these from GNU Emacs. 
  5894.  
  5895.  `ns32k-sequent' 
  5896.            Go to the Berkeley universe before compiling.  In addition, you 
  5897.            probably need to create a file named `string.h' containing just one 
  5898.            line: `#include <strings.h>'. 
  5899.  
  5900.  `ns32k-utek' 
  5901.            UTEK ns32000 system (``merlin'').  The C compiler that comes with 
  5902.            this system cannot compile GNU CC; contact `tektronix!reed!mason' to 
  5903.            get binaries of GNU CC for bootstrapping. 
  5904.  
  5905.  `romp-*-aos' 
  5906.  `romp-*-mach' 
  5907.            The only operating systems supported for the IBM RT PC are AOS and 
  5908.            MACH.  GNU CC does not support AIX running on the RT.  We recommend 
  5909.            you compile GNU CC with an earlier version of itself; if you compile 
  5910.            GNU CC with hc, the Metaware compiler, it will work, but you will 
  5911.            get mismatches between the stage 2 and stage 3 compilers in various 
  5912.            files. These errors are minor differences in some floating-point 
  5913.            constants and can be safely ignored; the stage 3 compiler is 
  5914.            correct. 
  5915.  
  5916.  `rs6000-*-aix' 
  5917.  `powerpc-*-aix' 
  5918.            Various early versions of each release of the IBM XLC compiler will 
  5919.            not bootstrap GNU CC.  Symptoms include differences between the 
  5920.            stage2 and stage3 object files, and errors when compiling `libgcc.a' 
  5921.            or `enquire'.  Known problematic releases include: xlc-1.2.1.8, 
  5922.            xlc-1.3.0.0 (distributed with AIX 3.2.5), and xlc-1.3.0.19.  Both 
  5923.            xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce 
  5924.            working versions of GNU CC, but most other recent releases correctly 
  5925.            bootstrap GNU CC.  Also, releases of AIX prior to AIX 3.2.4 include 
  5926.            a version of the IBM assembler which does not accept debugging 
  5927.            directives: assembler updates are available as PTFs.  Also, if you 
  5928.            are using AIX 3.2.5 or greater and the GNU assembler, you must have 
  5929.            a version modified after October 16th, 1995 in order for the GNU C 
  5930.            compiler to build.  See the file `README.RS6000' for more details on 
  5931.            of these problems. 
  5932.  
  5933.            GNU CC does not yet support the 64-bit PowerPC instructions. 
  5934.  
  5935.            Objective C does not work on this architecture because it makes 
  5936.            assumptions that are incompatible with the calling conventions. 
  5937.  
  5938.            AIX on the RS/6000 provides support (NLS) for environments outside 
  5939.            of the United States.  Compilers and assemblers use NLS to support 
  5940.            locale-specific representations of various objects including 
  5941.            floating-point numbers ("." vs "," for separating decimal 
  5942.            fractions). There have been problems reported where the library 
  5943.            linked with GNU CC does not produce the same floating-point formats 
  5944.            that the assembler accepts.  If you have this problem, set the LANG 
  5945.            environment variable to "C" or "En_US". 
  5946.  
  5947.            Due to changes in the way that GNU CC invokes the binder (linker) 
  5948.            for AIX 4.1, you may now receive warnings of duplicate symbols from 
  5949.            the link step that were not reported before.  The assembly files 
  5950.            generated by GNU CC for AIX have always included multiple symbol 
  5951.            definitions for certain global variable and function declarations in 
  5952.            the original program.  The warnings should not prevent the linker 
  5953.            from producing a correct library or runnable executable. 
  5954.  
  5955.  `powerpc-*-elf' 
  5956.  `powerpc-*-sysv4' 
  5957.            PowerPC system in big endian mode, running System V.4. 
  5958.  
  5959.            This configuration is currently under development. 
  5960.  
  5961.  `powerpc-*-eabiaix' 
  5962.            Embedded PowerPC system in big endian mode with -mcall-aix selected 
  5963.            as the default.  This system is currently under development. 
  5964.  
  5965.  `powerpc-*-eabisim' 
  5966.            Embedded PowerPC system in big endian mode for use in running under 
  5967.            the PSIM simulator.  This system is currently under development. 
  5968.  
  5969.  `powerpc-*-eabi' 
  5970.            Embedded PowerPC system in big endian mode. 
  5971.  
  5972.            This configuration is currently under development. 
  5973.  
  5974.  `powerpcle-*-elf' 
  5975.  `powerpcle-*-sysv4' 
  5976.            PowerPC system in little endian mode, running System V.4. 
  5977.  
  5978.            This configuration is currently under development. 
  5979.            `powerpcle-*-sysv4' Embedded PowerPC system in little endian mode. 
  5980.  
  5981.            This system is currently under development. 
  5982.  
  5983.  `powerpcle-*-eabisim' 
  5984.            Embedded PowerPC system in little endian mode for use in running 
  5985.            under the PSIM simulator. 
  5986.  
  5987.            This system is currently under development. 
  5988.            `powerpcle-*-eabi' Embedded PowerPC system in little endian mode. 
  5989.  
  5990.            This configuration is currently under development. 
  5991.  
  5992.  `vax-dec-ultrix' 
  5993.            Don't try compiling with Vax C (vcc).  It produces incorrect code in 
  5994.            some cases (for example, when alloca is used). 
  5995.  
  5996.            Meanwhile, compiling `cp/parse.c' with pcc does not work because of 
  5997.            an internal table size limitation in that compiler.  To avoid this 
  5998.            problem, compile just the GNU C compiler first, and use it to 
  5999.            recompile building all the languages that you want to run. 
  6000.  
  6001.  `sparc-sun-*' 
  6002.            See Sun Install, for information on installing GNU CC on Sun 
  6003.            systems. 
  6004.  
  6005.  `vax-dec-vms' 
  6006.            See VMS Install, for details on how to install GNU CC on VMS. 
  6007.  
  6008.  `we32k-*-*' 
  6009.            These computers are also known as the 3b2, 3b5, 3b20 and other 
  6010.            similar names.  (However, the 3b1 is actually a 68000; see 
  6011.            Configurations.) 
  6012.  
  6013.            Don't use `-g' when compiling with the system's compiler.  The 
  6014.            system's linker seems to be unable to handle such a large program 
  6015.            with debugging information. 
  6016.  
  6017.            The system's compiler runs out of capacity when compiling `stmt.c' 
  6018.            in GNU CC.  You can work around this by building `cpp' in GNU CC 
  6019.            first, then use that instead of the system's preprocessor with the 
  6020.            system's C compiler to compile `stmt.c'.  Here is how: 
  6021.  
  6022.                       mv /lib/cpp /lib/cpp.att
  6023.                       cp cpp /lib/cpp.gnu
  6024.                       echo '/lib/cpp.gnu -traditional ${1+"$@"}' > /lib/cpp
  6025.                       chmod +x /lib/cpp
  6026.  
  6027.            The system's compiler produces bad code for some of the GNU CC 
  6028.            optimization files.  So you must build the stage 2 compiler without 
  6029.            optimization.  Then build a stage 3 compiler with optimization. That 
  6030.            executable should work.  Here are the necessary commands: 
  6031.  
  6032.                       make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
  6033.                       make stage2
  6034.                       make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
  6035.  
  6036.            You may need to raise the ULIMIT setting to build a C++ compiler, as 
  6037.            the file `cc1plus' is larger than one megabyte. 
  6038.  
  6039.  
  6040. ΓòÉΓòÉΓòÉ 9.2. Compilation in a Separate Directory ΓòÉΓòÉΓòÉ
  6041.  
  6042. If you wish to build the object files and executables in a directory other than 
  6043. the one containing the source files, here is what you must do differently: 
  6044.  
  6045.    1. Make sure you have a version of Make that supports the VPATH feature. 
  6046.       (GNU Make supports it, as do Make versions on most BSD systems.) 
  6047.  
  6048.    2. If you have ever run `configure' in the source directory, you must undo 
  6049.       the configuration.  Do this by running: 
  6050.  
  6051.             make distclean
  6052.  
  6053.    3. Go to the directory in which you want to build the compiler before 
  6054.       running `configure': 
  6055.  
  6056.             mkdir gcc-sun3
  6057.             cd gcc-sun3
  6058.  
  6059.       On systems that do not support symbolic links, this directory must be on 
  6060.       the same file system as the source code directory. 
  6061.  
  6062.    4. Specify where to find `configure' when you run it: 
  6063.  
  6064.             ../gcc/configure ...
  6065.  
  6066.       This also tells configure where to find the compiler sources; configure 
  6067.       takes the directory from the file name that was used to invoke it.  But 
  6068.       if you want to be sure, you can specify the source directory with the 
  6069.       `--srcdir' option, like this: 
  6070.  
  6071.             ../gcc/configure --srcdir=../gcc other options
  6072.  
  6073.       The directory you specify with `--srcdir' need not be the same as the one 
  6074.       that configure is found in. 
  6075.  
  6076.  Now, you can run make in that directory.  You need not repeat the 
  6077.  configuration steps shown above, when ordinary source files change.  You must, 
  6078.  however, run configure again when the configuration files change, if your 
  6079.  system does not support symbolic links. 
  6080.  
  6081.  
  6082. ΓòÉΓòÉΓòÉ 9.3. Building and Installing a Cross-Compiler ΓòÉΓòÉΓòÉ
  6083.  
  6084. GNU CC can function as a cross-compiler for many machines, but not all. 
  6085.  
  6086.      Cross-compilers for the Mips as target using the Mips assembler currently 
  6087.       do not work, because the auxiliary programs `mips-tdump.c' and 
  6088.       `mips-tfile.c' can't be compiled on anything but a Mips.  It does work to 
  6089.       cross compile for a Mips if you use the GNU assembler and linker. 
  6090.  
  6091.      Cross-compilers between machines with different floating point formats 
  6092.       have not all been made to work.  GNU CC now has a floating point emulator 
  6093.       with which these can work, but each target machine description needs to 
  6094.       be updated to take advantage of it. 
  6095.  
  6096.      Cross-compilation between machines of different word sizes is somewhat 
  6097.       problematic and sometimes does not work. 
  6098.  
  6099.  Since GNU CC generates assembler code, you probably need a cross-assembler 
  6100.  that GNU CC can run, in order to produce object files. If you want to link on 
  6101.  other than the target machine, you need a cross-linker as well.  You also need 
  6102.  header files and libraries suitable for the target machine that you can 
  6103.  install on the host machine. 
  6104.  
  6105.  Steps of Cross                          Using a cross-compiler involves 
  6106.                                          several steps that may be carried out 
  6107.                                          on different machines. 
  6108.  Configure Cross                         Configuring a cross-compiler. 
  6109.  Tools and Libraries                     Where to put the linker and assembler, 
  6110.                                          and the C library. 
  6111.  Cross Headers                           Finding and installing header files 
  6112.                                          for a cross-compiler. 
  6113.  Cross Runtime                           Supplying arithmetic runtime routines 
  6114.                                          (libgcc1.a). 
  6115.  Build Cross                             Actually compiling the cross-compiler. 
  6116.  
  6117.  
  6118. ΓòÉΓòÉΓòÉ 9.3.1. Steps of Cross-Compilation ΓòÉΓòÉΓòÉ
  6119.  
  6120. To compile and run a program using a cross-compiler involves several steps: 
  6121.  
  6122.      Run the cross-compiler on the host machine to produce assembler files for 
  6123.       the target machine.  This requires header files for the target machine. 
  6124.  
  6125.      Assemble the files produced by the cross-compiler.  You can do this 
  6126.       either with an assembler on the target machine, or with a cross-assembler 
  6127.       on the host machine. 
  6128.  
  6129.      Link those files to make an executable.  You can do this either with a 
  6130.       linker on the target machine, or with a cross-linker on the host machine. 
  6131.       Whichever machine you use, you need libraries and certain startup files 
  6132.       (typically `crt....o') for the target machine. 
  6133.  
  6134.  It is most convenient to do all of these steps on the same host machine, since 
  6135.  then you can do it all with a single invocation of GNU CC.  This requires a 
  6136.  suitable cross-assembler and cross-linker.  For some targets, the GNU 
  6137.  assembler and linker are available. 
  6138.  
  6139.  
  6140. ΓòÉΓòÉΓòÉ 9.3.2. Configuring a Cross-Compiler ΓòÉΓòÉΓòÉ
  6141.  
  6142. To build GNU CC as a cross-compiler, you start out by running `configure'.  Use 
  6143. the `--target=target' to specify the target type.  If `configure' was unable to 
  6144. correctly identify the system you are running on, also specify the 
  6145. `--build=build' option.  For example, here is how to configure for a 
  6146. cross-compiler that produces code for an HP 68030 system running BSD on a 
  6147. system that `configure' can correctly identify: 
  6148.  
  6149. ./configure --target=m68k-hp-bsd4.3
  6150.  
  6151.  
  6152. ΓòÉΓòÉΓòÉ 9.3.3. Tools and Libraries for a Cross-Compiler ΓòÉΓòÉΓòÉ
  6153.  
  6154. If you have a cross-assembler and cross-linker available, you should install 
  6155. them now.  Put them in the directory `/usr/local/target/bin'.  Here is a table 
  6156. of the tools you should put in this directory: 
  6157.  
  6158.  `as' 
  6159.            This should be the cross-assembler. 
  6160.  
  6161.  `ld' 
  6162.            This should be the cross-linker. 
  6163.  
  6164.  `ar' 
  6165.            This should be the cross-archiver: a program which can manipulate 
  6166.            archive files (linker libraries) in the target machine's format. 
  6167.  
  6168.  `ranlib' 
  6169.            This should be a program to construct a symbol table in an archive 
  6170.            file. 
  6171.  
  6172.  The installation of GNU CC will find these programs in that directory, and 
  6173.  copy or link them to the proper place to for the cross-compiler to find them 
  6174.  when run later. 
  6175.  
  6176.  The easiest way to provide these files is to build the Binutils package and 
  6177.  GAS.  Configure them with the same `--host' and `--target' options that you 
  6178.  use for configuring GNU CC, then build and install them.  They install their 
  6179.  executables automatically into the proper directory.  Alas, they do not 
  6180.  support all the targets that GNU CC supports. 
  6181.  
  6182.  If you want to install libraries to use with the cross-compiler, such as a 
  6183.  standard C library, put them in the directory `/usr/local/target/lib'; 
  6184.  installation of GNU CC copies all all the files in that subdirectory into the 
  6185.  proper place for GNU CC to find them and link with them.  Here's an example of 
  6186.  copying some libraries from a target machine: 
  6187.  
  6188.   ftp target-machine
  6189.   lcd /usr/local/target/lib
  6190.   cd /lib
  6191.   get libc.a
  6192.   cd /usr/lib
  6193.   get libg.a
  6194.   get libm.a
  6195.   quit
  6196.  
  6197.  The precise set of libraries you'll need, and their locations on the target 
  6198.  machine, vary depending on its operating system. 
  6199.  
  6200.  Many targets require ``start files'' such as `crt0.o' and `crtn.o' which are 
  6201.  linked into each executable; these too should be placed in 
  6202.  `/usr/local/target/lib'.  There may be several alternatives for `crt0.o', for 
  6203.  use with profiling or other compilation options.  Check your target's 
  6204.  definition of STARTFILE_SPEC to find out what start files it uses. Here's an 
  6205.  example of copying these files from a target machine: 
  6206.  
  6207.   ftp target-machine
  6208.   lcd /usr/local/target/lib
  6209.   prompt
  6210.   cd /lib
  6211.   mget *crt*.o
  6212.   cd /usr/lib
  6213.   mget *crt*.o
  6214.   quit
  6215.  
  6216.  
  6217. ΓòÉΓòÉΓòÉ 9.3.4. libgcc.a and Cross-Compilers ΓòÉΓòÉΓòÉ
  6218.  
  6219. Code compiled by GNU CC uses certain runtime support functions implicitly. 
  6220. Some of these functions can be compiled successfully with GNU CC itself, but a 
  6221. few cannot be.  These problem functions are in the source file `libgcc1.c'; the 
  6222. library made from them is called `libgcc1.a'. 
  6223.  
  6224. When you build a native compiler, these functions are compiled with some other 
  6225. compiler--the one that you use for bootstrapping GNU CC. Presumably it knows 
  6226. how to open code these operations, or else knows how to call the run-time 
  6227. emulation facilities that the machine comes with. But this approach doesn't 
  6228. work for building a cross-compiler.  The compiler that you use for building 
  6229. knows about the host system, not the target system. 
  6230.  
  6231. So, when you build a cross-compiler you have to supply a suitable library 
  6232. `libgcc1.a' that does the job it is expected to do. 
  6233.  
  6234. To compile `libgcc1.c' with the cross-compiler itself does not work.  The 
  6235. functions in this file are supposed to implement arithmetic operations that GNU 
  6236. CC does not know how to open code for your target machine.  If these functions 
  6237. are compiled with GNU CC itself, they will compile into infinite recursion. 
  6238.  
  6239. On any given target, most of these functions are not needed.  If GNU CC can 
  6240. open code an arithmetic operation, it will not call these functions to perform 
  6241. the operation.  It is possible that on your target machine, none of these 
  6242. functions is needed.  If so, you can supply an empty library as `libgcc1.a'. 
  6243.  
  6244. Many targets need library support only for multiplication and division. If you 
  6245. are linking with a library that contains functions for multiplication and 
  6246. division, you can tell GNU CC to call them directly by defining the macros 
  6247. MULSI3_LIBCALL, and the like.  These macros need to be defined in the target 
  6248. description macro file.  For some targets, they are defined already.  This may 
  6249. be sufficient to avoid the need for libgcc1.a; if so, you can supply an empty 
  6250. library. 
  6251.  
  6252. Some targets do not have floating point instructions; they need other functions 
  6253. in `libgcc1.a', which do floating arithmetic. Recent versions of GNU CC have a 
  6254. file which emulates floating point. With a certain amount of work, you should 
  6255. be able to construct a floating point emulator that can be used as `libgcc1.a'. 
  6256. Perhaps future versions will contain code to do this automatically and 
  6257. conveniently.  That depends on whether someone wants to implement it. 
  6258.  
  6259. Some embedded targets come with all the necessary `libgcc1.a' routines written 
  6260. in C or assembler.  These targets build `libgcc1.a' automatically and you do 
  6261. not need to do anything special for them.  Other embedded targets do not need 
  6262. any `libgcc1.a' routines since all the necessary operations are supported by 
  6263. the hardware. 
  6264.  
  6265. If your target system has another C compiler, you can configure GNU CC as a 
  6266. native compiler on that machine, build just `libgcc1.a' with `make libgcc1.a' 
  6267. on that machine, and use the resulting file with the cross-compiler.  To do 
  6268. this, execute the following on the target machine: 
  6269.  
  6270. cd target-build-dir
  6271. ./configure --host=sparc --target=sun3
  6272. make libgcc1.a
  6273.  
  6274. And then this on the host machine: 
  6275.  
  6276. ftp target-machine
  6277. binary
  6278. cd target-build-dir
  6279. get libgcc1.a
  6280. quit
  6281.  
  6282. Another way to provide the functions you need in `libgcc1.a' is to define the 
  6283. appropriate perform_... macros for those functions.  If these definitions do 
  6284. not use the C arithmetic operators that they are meant to implement, you should 
  6285. be able to compile them with the cross-compiler you are building.  (If these 
  6286. definitions already exist for your target file, then you are all set.) 
  6287.  
  6288. To build `libgcc1.a' using the perform macros, use `LIBGCC1=libgcc1.a 
  6289. OLDCC=./xgcc' when building the compiler. Otherwise, you should place your 
  6290. replacement library under the name `libgcc1.a' in the directory in which you 
  6291. will build the cross-compiler, before you run make. 
  6292.  
  6293.  
  6294. ΓòÉΓòÉΓòÉ 9.3.5. Cross-Compilers and Header Files ΓòÉΓòÉΓòÉ
  6295.  
  6296. If you are cross-compiling a standalone program or a program for an embedded 
  6297. system, then you may not need any header files except the few that are part of 
  6298. GNU CC (and those of your program).  However, if you intend to link your 
  6299. program with a standard C library such as `libc.a', then you probably need to 
  6300. compile with the header files that go with the library you use. 
  6301.  
  6302. The GNU C compiler does not come with these files, because (1) they are 
  6303. system-specific, and (2) they belong in a C library, not in a compiler. 
  6304.  
  6305. If the GNU C library supports your target machine, then you can get the header 
  6306. files from there (assuming you actually use the GNU library when you link your 
  6307. program). 
  6308.  
  6309. If your target machine comes with a C compiler, it probably comes with suitable 
  6310. header files also.  If you make these files accessible from the host machine, 
  6311. the cross-compiler can use them also. 
  6312.  
  6313. Otherwise, you're on your own in finding header files to use when 
  6314. cross-compiling. 
  6315.  
  6316. When you have found suitable header files, put them in 
  6317. `/usr/local/target/include', before building the cross compiler.  Then 
  6318. installation will run fixincludes properly and install the corrected versions 
  6319. of the header files where the compiler will use them. 
  6320.  
  6321. Provide the header files before you build the cross-compiler, because the build 
  6322. stage actually runs the cross-compiler to produce parts of `libgcc.a'.  (These 
  6323. are the parts that can be compiled with GNU CC.)  Some of them need suitable 
  6324. header files. 
  6325.  
  6326. Here's an example showing how to copy the header files from a target machine. 
  6327. On the target machine, do this: 
  6328.  
  6329. (cd /usr/include; tar cf - .) > tarfile
  6330.  
  6331. Then, on the host machine, do this: 
  6332.  
  6333. ftp target-machine
  6334. lcd /usr/local/target/include
  6335. get tarfile
  6336. quit
  6337. tar xf tarfile
  6338.  
  6339.  
  6340. ΓòÉΓòÉΓòÉ 9.3.6. Actually Building the Cross-Compiler ΓòÉΓòÉΓòÉ
  6341.  
  6342. Now you can proceed just as for compiling a single-machine compiler through the 
  6343. step of building stage 1.  If you have not provided some sort of `libgcc1.a', 
  6344. then compilation will give up at the point where it needs that file, printing a 
  6345. suitable error message.  If you do provide `libgcc1.a', then building the 
  6346. compiler will automatically compile and link a test program called 
  6347. `libgcc1-test'; if you get errors in the linking, it means that not all of the 
  6348. necessary routines in `libgcc1.a' are available. 
  6349.  
  6350. You must provide the header file `float.h'.  One way to do this is to compile 
  6351. `enquire' and run it on your target machine.  The job of `enquire' is to run on 
  6352. the target machine and figure out by experiment the nature of its floating 
  6353. point representation. `enquire' records its findings in the header file 
  6354. `float.h'. If you can't produce this file by running `enquire' on the target 
  6355. machine, then you will need to come up with a suitable `float.h' in some other 
  6356. way (or else, avoid using it in your programs). 
  6357.  
  6358. Do not try to build stage 2 for a cross-compiler.  It doesn't work to rebuild 
  6359. GNU CC as a cross-compiler using the cross-compiler, because that would produce 
  6360. a program that runs on the target machine, not on the host.  For example, if 
  6361. you compile a 386-to-68030 cross-compiler with itself, the result will not be 
  6362. right either for the 386 (because it was compiled into 68030 code) or for the 
  6363. 68030 (because it was configured for a 386 as the host).  If you want to 
  6364. compile GNU CC into 68030 code, whether you compile it on a 68030 or with a 
  6365. cross-compiler on a 386, you must specify a 68030 as the host when you 
  6366. configure it. 
  6367.  
  6368. To install the cross-compiler, use `make install', as usual. 
  6369.  
  6370.  
  6371. ΓòÉΓòÉΓòÉ 9.4. Installing GNU CC on the Sun ΓòÉΓòÉΓòÉ
  6372.  
  6373. On Solaris (version 2.1), do not use the linker or other tools in `/usr/ucb' to 
  6374. build GNU CC.  Use /usr/ccs/bin. 
  6375.  
  6376. Make sure the environment variable FLOAT_OPTION is not set when you compile 
  6377. `libgcc.a'.  If this option were set to f68881 when `libgcc.a' is compiled, the 
  6378. resulting code would demand to be linked with a special startup file and would 
  6379. not link properly without special pains. 
  6380.  
  6381. There is a bug in alloca in certain versions of the Sun library. To avoid this 
  6382. bug, install the binaries of GNU CC that were compiled by GNU CC.  They use 
  6383. alloca as a built-in function and never the one in the library. 
  6384.  
  6385. Some versions of the Sun compiler crash when compiling GNU CC.  The problem is 
  6386. a segmentation fault in cpp.  This problem seems to be due to the bulk of data 
  6387. in the environment variables.  You may be able to avoid it by using the 
  6388. following command to compile GNU CC with Sun CC: 
  6389.  
  6390. make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
  6391.  
  6392.  
  6393. ΓòÉΓòÉΓòÉ 9.5. Installing GNU CC on VMS ΓòÉΓòÉΓòÉ
  6394.  
  6395. The VMS version of GNU CC is distributed in a backup saveset containing both 
  6396. source code and precompiled binaries. 
  6397.  
  6398. To install the `gcc' command so you can use the compiler easily, in the same 
  6399. manner as you use the VMS C compiler, you must install the VMS CLD file for GNU 
  6400. CC as follows: 
  6401.  
  6402.    1. Define the VMS logical names `GNU_CC' and `GNU_CC_INCLUDE' to point to 
  6403.       the directories where the GNU CC executables (`gcc-cpp.exe', 
  6404.       `gcc-cc1.exe', etc.) and the C include files are kept respectively.  This 
  6405.       should be done with the commands: 
  6406.  
  6407.             $ assign /system /translation=concealed -
  6408.               disk:[gcc.] gnu_cc
  6409.             $ assign /system /translation=concealed -
  6410.               disk:[gcc.include.] gnu_cc_include
  6411.  
  6412.       with the appropriate disk and directory names.  These commands can be 
  6413.       placed in your system startup file so they will be executed whenever the 
  6414.       machine is rebooted.  You may, if you choose, do this via the 
  6415.       `GCC_INSTALL.COM' script in the `[GCC]' directory. 
  6416.  
  6417.    2. Install the `GCC' command with the command line: 
  6418.  
  6419.             $ set command /table=sys$common:[syslib]dcltables -
  6420.               /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
  6421.             $ install replace sys$common:[syslib]dcltables
  6422.  
  6423.    3. To install the help file, do the following: 
  6424.  
  6425.             $ library/help sys$library:helplib.hlb gcc.hlp
  6426.  
  6427.       Now you can invoke the compiler with a command like `gcc /verbose 
  6428.       file.c', which is equivalent to the command `gcc -v -c file.c' in Unix. 
  6429.  
  6430.  If you wish to use GNU C++ you must first install GNU CC, and then perform the 
  6431.  following steps: 
  6432.  
  6433.    1. Define the VMS logical name `GNU_GXX_INCLUDE' to point to the directory 
  6434.       where the preprocessor will search for the C++ header files. This can be 
  6435.       done with the command: 
  6436.  
  6437.             $ assign /system /translation=concealed -
  6438.               disk:[gcc.gxx_include.] gnu_gxx_include
  6439.  
  6440.       with the appropriate disk and directory name.  If you are going to be 
  6441.       using libg++, this is where the libg++ install procedure will install the 
  6442.       libg++ header files. 
  6443.  
  6444.    2. Obtain the file `gcc-cc1plus.exe', and place this in the same directory 
  6445.       that `gcc-cc1.exe' is kept. 
  6446.  
  6447.       The GNU C++ compiler can be invoked with a command like `gcc /plus 
  6448.       /verbose file.cc', which is equivalent to the command `g++ -v -c file.cc' 
  6449.       in Unix. 
  6450.  
  6451.  We try to put corresponding binaries and sources on the VMS distribution tape. 
  6452.  But sometimes the binaries will be from an older version than the sources, 
  6453.  because we don't always have time to update them.  (Use the `/version' option 
  6454.  to determine the version number of the binaries and compare it with the source 
  6455.  file `version.c' to tell whether this is so.)  In this case, you should use 
  6456.  the binaries you get to recompile the sources.  If you must recompile, here is 
  6457.  how: 
  6458.  
  6459.    1. Execute the command procedure `vmsconfig.com' to set up the files `tm.h', 
  6460.       `config.h', `aux-output.c', and `md.', and to create files `tconfig.h' 
  6461.       and `hconfig.h'.  This procedure also creates several linker option files 
  6462.       used by `make-cc1.com' and a data file used by `make-l2.com'. 
  6463.  
  6464.             $ @vmsconfig.com
  6465.  
  6466.    2. Setup the logical names and command tables as defined above.  In 
  6467.       addition, define the VMS logical name `GNU_BISON' to point at the to the 
  6468.       directories where the Bison executable is kept.  This should be done with 
  6469.       the command: 
  6470.  
  6471.             $ assign /system /translation=concealed -
  6472.               disk:[bison.] gnu_bison
  6473.  
  6474.       You may, if you choose, use the `INSTALL_BISON.COM' script in the 
  6475.       `[BISON]' directory. 
  6476.  
  6477.    3. Install the `BISON' command with the command line: 
  6478.  
  6479.             $ set command /table=sys$common:[syslib]dcltables -
  6480.               /output=sys$common:[syslib]dcltables -
  6481.               gnu_bison:[000000]bison
  6482.             $ install replace sys$common:[syslib]dcltables
  6483.  
  6484.    4. Type `@make-gcc' to recompile everything (alternatively, submit the file 
  6485.       `make-gcc.com' to a batch queue).  If you wish to build the GNU C++ 
  6486.       compiler as well as the GNU CC compiler, you must first edit 
  6487.       `make-gcc.com' and follow the instructions that appear in the comments. 
  6488.  
  6489.    5. In order to use GCC, you need a library of functions which GCC compiled 
  6490.       code will call to perform certain tasks, and these functions are defined 
  6491.       in the file `libgcc2.c'.  To compile this you should use the command 
  6492.       procedure `make-l2.com', which will generate the library `libgcc2.olb'. 
  6493.       `libgcc2.olb' should be built using the compiler built from the same 
  6494.       distribution that `libgcc2.c' came from, and `make-gcc.com' will 
  6495.       automatically do all of this for you. 
  6496.  
  6497.       To install the library, use the following commands: 
  6498.  
  6499.             $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
  6500.             $ library gnu_cc:[000000]gcclib/delete=L_*
  6501.             $ library libgcc2/extract=*/output=libgcc2.obj
  6502.             $ library gnu_cc:[000000]gcclib libgcc2.obj
  6503.  
  6504.       The first command simply removes old modules that will be replaced with 
  6505.       modules from `libgcc2' under different module names.  The modules new and 
  6506.       eprintf may not actually be present in your `gcclib.olb'---if the VMS 
  6507.       librarian complains about those modules not being present, simply ignore 
  6508.       the message and continue on with the next command.  The second command 
  6509.       removes the modules that came from the previous version of the library 
  6510.       `libgcc2.c'. 
  6511.  
  6512.       Whenever you update the compiler on your system, you should also update 
  6513.       the library with the above procedure. 
  6514.  
  6515.    6. You may wish to build GCC in such a way that no files are written to the 
  6516.       directory where the source files reside.  An example would be the when 
  6517.       the source files are on a read-only disk.  In these cases, execute the 
  6518.       following DCL commands (substituting your actual path names): 
  6519.  
  6520.             $ assign dua0:[gcc.build_dir.]/translation=concealed, -
  6521.                      dua1:[gcc.source_dir.]/translation=concealed  gcc_build
  6522.             $ set default gcc_build:[000000]
  6523.  
  6524.       where the directory `dua1:[gcc.source_dir]' contains the source code, and 
  6525.       the directory `dua0:[gcc.build_dir]' is meant to contain all of the 
  6526.       generated object files and executables.  Once you have done this, you can 
  6527.       proceed building GCC as described above.  (Keep in mind that `gcc_build' 
  6528.       is a rooted logical name, and thus the device names in each element of 
  6529.       the search list must be an actual physical device name rather than 
  6530.       another rooted logical name). 
  6531.  
  6532.    7. *If you are building GNU CC with a previous version of GNU CC, you also 
  6533.       should check to see that you have the newest version of the assembler*. 
  6534.       In particular, GNU CC version 2 treats global constant variables slightly 
  6535.       differently from GNU CC version 1, and GAS version 1.38.1 does not have 
  6536.       the patches required to work with GCC version 2. If you use GAS 1.38.1, 
  6537.       then extern const variables will not have the read-only bit set, and the 
  6538.       linker will generate warning messages about mismatched psect attributes 
  6539.       for these variables.  These warning messages are merely a nuisance, and 
  6540.       can safely be ignored. 
  6541.  
  6542.       If you are compiling with a version of GNU CC older than 1.33, specify 
  6543.       `/DEFINE=("inline=")' as an option in all the compilations.  This 
  6544.       requires editing all the gcc commands in `make-cc1.com'. (The older 
  6545.       versions had problems supporting inline.)  Once you have a working 1.33 
  6546.       or newer GNU CC, you can change this file back. 
  6547.  
  6548.    8. If you want to build GNU CC with the VAX C compiler, you will need to 
  6549.       make minor changes in `make-cccp.com' and `make-cc1.com' to choose 
  6550.       alternate definitions of CC, CFLAGS, and LIBS.  See comments in those 
  6551.       files.  However, you must also have a working version of the GNU 
  6552.       assembler (GNU as, aka GAS) as it is used as the back-end for GNU CC to 
  6553.       produce binary object modules and is not included in the GNU CC sources. 
  6554.       GAS is also needed to compile `libgcc2' in order to build `gcclib' (see 
  6555.       above); `make-l2.com' expects to be able to find it operational in 
  6556.       `gnu_cc:[000000]gnu-as.exe'. 
  6557.  
  6558.       To use GNU CC on VMS, you need the VMS driver programs `gcc.exe', 
  6559.       `gcc.com', and `gcc.cld'.  They are distributed with the VMS binaries 
  6560.       (`gcc-vms') rather than the GNU CC sources.  GAS is also included in 
  6561.       `gcc-vms', as is Bison. 
  6562.  
  6563.       Once you have successfully built GNU CC with VAX C, you should use the 
  6564.       resulting compiler to rebuild itself.  Before doing this, be sure to 
  6565.       restore the CC, CFLAGS, and LIBS definitions in `make-cccp.com' and 
  6566.       `make-cc1.com'.  The second generation compiler will be able to take 
  6567.       advantage of many optimizations that must be suppressed when building 
  6568.       with other compilers. 
  6569.  
  6570.  Under previous versions of GNU CC, the generated code would occasionally give 
  6571.  strange results when linked with the sharable `VAXCRTL' library. Now this 
  6572.  should work. 
  6573.  
  6574.  Even with this version, however, GNU CC itself should not be linked with the 
  6575.  sharable `VAXCRTL'.  The version of qsort in `VAXCRTL' has a bug (known to be 
  6576.  present in VMS versions V4.6 through V5.5) which causes the compiler to fail. 
  6577.  
  6578.  The executables are generated by `make-cc1.com' and `make-cccp.com' use the 
  6579.  object library version of `VAXCRTL' in order to make use of the qsort routine 
  6580.  in `gcclib.olb'.  If you wish to link the compiler executables with the 
  6581.  shareable image version of `VAXCRTL', you should edit the file `tm.h' (created 
  6582.  by `vmsconfig.com') to define the macro QSORT_WORKAROUND. 
  6583.  
  6584.  QSORT_WORKAROUND is always defined when GNU CC is compiled with VAX C, to 
  6585.  avoid a problem in case `gcclib.olb' is not yet available. 
  6586.  
  6587.  
  6588. ΓòÉΓòÉΓòÉ 9.6. collect2 ΓòÉΓòÉΓòÉ
  6589.  
  6590. Many target systems do not have support in the assembler and linker for 
  6591. ``constructors''---initialization functions to be called before the official 
  6592. ``start'' of main.  On such systems, GNU CC uses a utility called collect2 to 
  6593. arrange to call these functions at start time. 
  6594.  
  6595. The program collect2 works by linking the program once and looking through the 
  6596. linker output file for symbols with particular names indicating they are 
  6597. constructor functions.  If it finds any, it creates a new temporary `.c' file 
  6598. containing a table of them, compiles it, and links the program a second time 
  6599. including that file. 
  6600.  
  6601. The actual calls to the constructors are carried out by a subroutine called 
  6602. __main, which is called (automatically) at the beginning of the body of main 
  6603. (provided main was compiled with GNU CC).  Calling __main is necessary, even 
  6604. when compiling C code, to allow linking C and C++ object code together.  (If 
  6605. you use `-nostdlib', you get an unresolved reference to __main, since it's 
  6606. defined in the standard GCC library.  Include `-lgcc' at the end of your 
  6607. compiler command line to resolve this reference.) 
  6608.  
  6609. The program collect2 is installed as ld in the directory where the passes of 
  6610. the compiler are installed.  When collect2 needs to find the real ld, it tries 
  6611. the following file names: 
  6612.  
  6613.      `real-ld' in the directories listed in the compiler's search directories. 
  6614.  
  6615.      `real-ld' in the directories listed in the environment variable PATH. 
  6616.  
  6617.      The file specified in the REAL_LD_FILE_NAME configuration macro, if 
  6618.       specified. 
  6619.  
  6620.      `ld' in the compiler's search directories, except that collect2 will not 
  6621.       execute itself recursively. 
  6622.  
  6623.      `ld' in PATH. 
  6624.  
  6625.  ``The compiler's search directories'' means all the directories where gcc 
  6626.  searches for passes of the compiler.  This includes directories that you 
  6627.  specify with `-B'. 
  6628.  
  6629.  Cross-compilers search a little differently: 
  6630.  
  6631.      `real-ld' in the compiler's search directories. 
  6632.  
  6633.      `target-real-ld' in PATH. 
  6634.  
  6635.      The file specified in the REAL_LD_FILE_NAME configuration macro, if 
  6636.       specified. 
  6637.  
  6638.      `ld' in the compiler's search directories. 
  6639.  
  6640.      `target-ld' in PATH. 
  6641.  
  6642.  collect2 explicitly avoids running ld using the file name under which collect2 
  6643.  itself was invoked.  In fact, it remembers up a list of such names---in case 
  6644.  one copy of collect2 finds another copy (or version) of collect2 installed as 
  6645.  ld in a second place in the search path. 
  6646.  
  6647.  collect2 searches for the utilities nm and strip using the same algorithm as 
  6648.  above for ld. 
  6649.  
  6650.  
  6651. ΓòÉΓòÉΓòÉ 9.7. Standard Header File Directories ΓòÉΓòÉΓòÉ
  6652.  
  6653. GCC_INCLUDE_DIR means the same thing for native and cross.  It is where GNU CC 
  6654. stores its private include files, and also where GNU CC stores the fixed 
  6655. include files.  A cross compiled GNU CC runs fixincludes on the header files in 
  6656. `$(tooldir)/include'. (If the cross compilation header files need to be fixed, 
  6657. they must be installed before GNU CC is built.  If the cross compilation header 
  6658. files are already suitable for ANSI C and GNU CC, nothing special need be 
  6659. done). 
  6660.  
  6661. GPLUS_INCLUDE_DIR means the same thing for native and cross.  It is where g++ 
  6662. looks first for header files.  libg++ installs only target independent header 
  6663. files in that directory. 
  6664.  
  6665. LOCAL_INCLUDE_DIR is used only for a native compiler.  It is normally 
  6666. `/usr/local/include'.  GNU CC searches this directory so that users can install 
  6667. header files in `/usr/local/include'. 
  6668.  
  6669. CROSS_INCLUDE_DIR is used only for a cross compiler.  GNU CC doesn't install 
  6670. anything there. 
  6671.  
  6672. TOOL_INCLUDE_DIR is used for both native and cross compilers.  It is the place 
  6673. for other packages to install header files that GNU CC will use.  For a 
  6674. cross-compiler, this is the equivalent of `/usr/include'.  When you build a 
  6675. cross-compiler, fixincludes processes any header files in this directory. 
  6676.  
  6677.  
  6678. ΓòÉΓòÉΓòÉ 10. Extensions to the C Language Family ΓòÉΓòÉΓòÉ
  6679.  
  6680. GNU C provides several language features not found in ANSI standard C. (The 
  6681. `-pedantic' option directs GNU CC to print a warning message if any of these 
  6682. features is used.)  To test for the availability of these features in 
  6683. conditional compilation, check for a predefined macro __GNUC__, which is always 
  6684. defined under GNU CC. 
  6685.  
  6686. These extensions are available in C and Objective C.  Most of them are also 
  6687. available in C++. See Extensions to the C++ Language, for extensions that apply 
  6688. only to C++. 
  6689.  
  6690.  Statement Exprs                         Putting statements and declarations 
  6691.                                          inside expressions. 
  6692.  Local Labels                            Labels local to a 
  6693.                                          statement-expression. 
  6694.  Labels as Values                        Getting pointers to labels, and 
  6695.                                          computed gotos. 
  6696.  Nested Functions                        As in Algol and Pascal, lexical 
  6697.                                          scoping of functions. 
  6698.  Constructing Calls                      Dispatching a call to another 
  6699.                                          function. 
  6700.  Naming Types                            Giving a name to the type of some 
  6701.                                          expression. 
  6702.  Typeof                                  typeof: referring to the type of an 
  6703.                                          expression. 
  6704.  Lvalues                                 Using ?:, , and casts in lvalues. 
  6705.  Conditionals                            Omitting the middle operand of a ?: 
  6706.                                          expression. 
  6707.  Long Long                               Double-word integers---long long int. 
  6708.  Complex                                 Data types for complex numbers. 
  6709.  Zero Length                             Zero-length arrays. 
  6710.  Variable Length                         Arrays whose length is computed at run 
  6711.                                          time. 
  6712.  Macro Varargs                           Macros with variable number of 
  6713.                                          arguments. 
  6714.  Subscripting                            Any array can be subscripted, even if 
  6715.                                          not an lvalue. 
  6716.  Pointer Arith                           Arithmetic on void-pointers and 
  6717.                                          function pointers. 
  6718.  Initializers                            Non-constant initializers. 
  6719.  Constructors                            Constructor expressions give 
  6720.                                          structures, unions 
  6721.               or arrays as values. 
  6722.  
  6723.  Labeled Elements                        Labeling elements of initializers. 
  6724.  Cast to Union                           Casting to union type from any member 
  6725.                                          of the union. 
  6726.  Case Ranges                             `case 1 ... 9' and such. 
  6727.  Function Attributes                     Declaring that functions have no side 
  6728.                                          effects, 
  6729.               or that they can never return. 
  6730.  
  6731.  Function Prototypes                     Prototype declarations and old-style 
  6732.                                          definitions. 
  6733.  C++ Comments                            C++ comments are recognized. 
  6734.  Dollar Signs                            Dollar sign is allowed in identifiers. 
  6735.  Character Escapes                       \e stands for the character ESC. 
  6736.  Variable Attributes                     Specifying attributes of variables. 
  6737.  Type Attributes                         Specifying attributes of types. 
  6738.  Alignment                               Inquiring about the alignment of a 
  6739.                                          type or variable. 
  6740.  Inline                                  Defining inline functions (as fast as 
  6741.                                          macros). 
  6742.  Extended Asm                            Assembler instructions with C 
  6743.                                          expressions as operands. 
  6744.               (With them you can define ``built-in'' functions.) 
  6745.  
  6746.  Asm Labels                              Specifying the assembler name to use 
  6747.                                          for a C symbol. 
  6748.  Explicit Reg Vars                       Defining variables residing in 
  6749.                                          specified registers. 
  6750.  Alternate Keywords                      __const__, __asm__, etc., for header 
  6751.                                          files. 
  6752.  Incomplete Enums                        enum foo;, with details to follow. 
  6753.  Function Names                          Printable strings which are the name 
  6754.                                          of the current 
  6755.      s     s     s function. 
  6756.  
  6757.  Bounds Checking                         Add full, fine-grained array & pointer 
  6758.                                          checking to 
  6759.               C programs. 
  6760.  
  6761.  Statement Exprs                         Putting statements and declarations 
  6762.                                          inside expressions. 
  6763.  Local Labels                            Labels local to a 
  6764.                                          statement-expression. 
  6765.  Labels as Values                        Getting pointers to labels, and 
  6766.                                          computed gotos. 
  6767.  Nested Functions                        As in Algol and Pascal, lexical 
  6768.                                          scoping of functions. 
  6769.  Constructing Calls                      Dispatching a call to another 
  6770.                                          function. 
  6771.  Naming Types                            Giving a name to the type of some 
  6772.                                          expression. 
  6773.  Typeof                                  typeof: referring to the type of an 
  6774.                                          expression. 
  6775.  Lvalues                                 Using ?:, , and casts in lvalues. 
  6776.  Conditionals                            Omitting the middle operand of a ?: 
  6777.                                          expression. 
  6778.  Long Long                               Double-word integers---long long int. 
  6779.  Complex                                 Data types for complex numbers. 
  6780.  Zero Length                             Zero-length arrays. 
  6781.  Variable Length                         Arrays whose length is computed at run 
  6782.                                          time. 
  6783.  Macro Varargs                           Macros with variable number of 
  6784.                                          arguments. 
  6785.  Subscripting                            Any array can be subscripted, even if 
  6786.                                          not an lvalue. 
  6787.  Pointer Arith                           Arithmetic on void-pointers and 
  6788.                                          function pointers. 
  6789.  Initializers                            Non-constant initializers. 
  6790.  Constructors                            Constructor expressions give 
  6791.                                          structures, unions 
  6792.  
  6793.  Labeled Elements                        Labeling elements of initializers. 
  6794.  Cast to Union                           Casting to union type from any member 
  6795.                                          of the union. 
  6796.  Case Ranges                             `case 1 ... 9' and such. 
  6797.  Function Attributes                     Declaring that functions have no side 
  6798.                                          effects, 
  6799.  
  6800.  Function Prototypes                     Prototype declarations and old-style 
  6801.                                          definitions. 
  6802.  C++ Comments                            C++ comments are recognized. 
  6803.  Dollar Signs                            Dollar sign is allowed in identifiers. 
  6804.  Character Escapes                       \e stands for the character ESC. 
  6805.  Variable Attributes                     Specifying attributes of variables. 
  6806.  Type Attributes                         Specifying attributes of types. 
  6807.  Alignment                               Inquiring about the alignment of a 
  6808.                                          type or variable. 
  6809.  Inline                                  Defining inline functions (as fast as 
  6810.                                          macros). 
  6811.  Extended Asm                            Assembler instructions with C 
  6812.                                          expressions as operands. 
  6813.  
  6814.  Constraints                             Constraints for asm operands 
  6815.  Asm Labels                              Specifying the assembler name to use 
  6816.                                          for a C symbol. 
  6817.  Explicit Reg Vars                       Defining variables residing in 
  6818.                                          specified registers. 
  6819.  Alternate Keywords                      __const__, __asm__, etc., for header 
  6820.                                          files. 
  6821.  Incomplete Enums                        enum foo;, with details to follow. 
  6822.  Function Names                          Printable strings which are the name 
  6823.                                          of the current 
  6824.  
  6825.  Bounds Checking                         Add full, fine-grained array & pointer 
  6826.                                          checking to 
  6827.  
  6828.  
  6829. ΓòÉΓòÉΓòÉ 10.1. Statements and Declarations in Expressions ΓòÉΓòÉΓòÉ
  6830.  
  6831. A compound statement enclosed in parentheses may appear as an expression in GNU 
  6832. C.  This allows you to use loops, switches, and local variables within an 
  6833. expression. 
  6834.  
  6835. Recall that a compound statement is a sequence of statements surrounded by 
  6836. braces; in this construct, parentheses go around the braces.  For example: 
  6837.  
  6838. ({ int y = foo (); int z;
  6839.    if (y > 0) z = y;
  6840.    else z = - y;
  6841.    z; })
  6842.  
  6843. is a valid (though slightly more complex than necessary) expression for the 
  6844. absolute value of foo (). 
  6845.  
  6846. The last thing in the compound statement should be an expression followed by a 
  6847. semicolon; the value of this subexpression serves as the value of the entire 
  6848. construct.  (If you use some other kind of statement last within the braces, 
  6849. the construct has type void, and thus effectively no value.) 
  6850.  
  6851. This feature is especially useful in making macro definitions ``safe'' (so that 
  6852. they evaluate each operand exactly once).  For example, the ``maximum'' 
  6853. function is commonly defined as a macro in standard C as follows: 
  6854.  
  6855. #define max(a,b) ((a) > (b) ? (a) : (b))
  6856.  
  6857. But this definition computes either a or b twice, with bad results if the 
  6858. operand has side effects.  In GNU C, if you know the type of the operands (here 
  6859. let's assume int), you can define the macro safely as follows: 
  6860.  
  6861. #define maxint(a,b) \
  6862.   ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
  6863.  
  6864. Embedded statements are not allowed in constant expressions, such as the value 
  6865. of an enumeration constant, the width of a bit field, or the initial value of a 
  6866. static variable. 
  6867.  
  6868. If you don't know the type of the operand, you can still do this, but you must 
  6869. use typeof (see Typeof) or type naming ( see Naming Types). 
  6870.  
  6871.  
  6872. ΓòÉΓòÉΓòÉ 10.2. Locally Declared Labels ΓòÉΓòÉΓòÉ
  6873.  
  6874. Each statement expression is a scope in which local labels can be declared.  A 
  6875. local label is simply an identifier; you can jump to it with an ordinary goto 
  6876. statement, but only from within the statement expression it belongs to. 
  6877.  
  6878. A local label declaration looks like this: 
  6879.  
  6880. __label__ label;
  6881.  
  6882. or 
  6883.  
  6884. __label__ label1, label2, ...;
  6885.  
  6886. Local label declarations must come at the beginning of the statement 
  6887. expression, right after the `({', before any ordinary declarations. 
  6888.  
  6889. The label declaration defines the label name, but does not define the label 
  6890. itself.  You must do this in the usual way, with label:, within the statements 
  6891. of the statement expression. 
  6892.  
  6893. The local label feature is useful because statement expressions are often used 
  6894. in macros.  If the macro contains nested loops, a goto can be useful for 
  6895. breaking out of them.  However, an ordinary label whose scope is the whole 
  6896. function cannot be used: if the macro can be expanded several times in one 
  6897. function, the label will be multiply defined in that function.  A local label 
  6898. avoids this problem.  For example: 
  6899.  
  6900. #define SEARCH(array, target)                     \
  6901. ({                                               \
  6902.   __label__ found;                                \
  6903.   typeof (target) _SEARCH_target = (target);      \
  6904.   typeof (*(array)) *_SEARCH_array = (array);     \
  6905.   int i, j;                                       \
  6906.   int value;                                      \
  6907.   for (i = 0; i < max; i++)                       \
  6908.     for (j = 0; j < max; j++)                     \
  6909.       if (_SEARCH_array[i][j] == _SEARCH_target)  \
  6910.         { value = i; goto found; }              \
  6911.   value = -1;                                     \
  6912.  found:                                           \
  6913.   value;                                          \
  6914. })
  6915.  
  6916.  
  6917. ΓòÉΓòÉΓòÉ 10.3. Labels as Values ΓòÉΓòÉΓòÉ
  6918.  
  6919. You can get the address of a label defined in the current function (or a 
  6920. containing function) with the unary operator `&&'.  The value has type void *. 
  6921. This value is a constant and can be used wherever a constant of that type is 
  6922. valid.  For example: 
  6923.  
  6924. void *ptr;
  6925. ...
  6926. ptr = &&foo;
  6927.  
  6928. To use these values, you need to be able to jump to one.  This is done with the 
  6929. computed goto statement(2), goto *exp;.  For example, 
  6930.  
  6931. goto *ptr;
  6932.  
  6933. Any expression of type void * is allowed. 
  6934.  
  6935. One way of using these constants is in initializing a static array that will 
  6936. serve as a jump table: 
  6937.  
  6938. static void *array[] = { &&foo, &&bar, &&hack };
  6939.  
  6940. Then you can select a label with indexing, like this: 
  6941.  
  6942. goto *array[i];
  6943.  
  6944. Note that this does not check whether the subscript is in bounds---array 
  6945. indexing in C never does that. 
  6946.  
  6947. Such an array of label values serves a purpose much like that of the switch 
  6948. statement.  The switch statement is cleaner, so use that rather than an array 
  6949. unless the problem does not fit a switch statement very well. 
  6950.  
  6951. Another use of label values is in an interpreter for threaded code. The labels 
  6952. within the interpreter function can be stored in the threaded code for 
  6953. super-fast dispatching. 
  6954.  
  6955. You can use this mechanism to jump to code in a different function.  If you do 
  6956. that, totally unpredictable things will happen.  The best way to avoid this is 
  6957. to store the label address only in automatic variables and never pass it as an 
  6958. argument. 
  6959.  
  6960.  
  6961. ΓòÉΓòÉΓòÉ 10.4. Nested Functions ΓòÉΓòÉΓòÉ
  6962.  
  6963. A nested function is a function defined inside another function. (Nested 
  6964. functions are not supported for GNU C++.)  The nested function's name is local 
  6965. to the block where it is defined.  For example, here we define a nested 
  6966. function named square, and call it twice: 
  6967.  
  6968. foo (double a, double b)
  6969. {
  6970.   double square (double z) { return z * z; }
  6971.  
  6972.   return square (a) + square (b);
  6973. }
  6974.  
  6975. The nested function can access all the variables of the containing function 
  6976. that are visible at the point of its definition.  This is called lexical 
  6977. scoping.  For example, here we show a nested function which uses an inherited 
  6978. variable named offset: 
  6979.  
  6980. bar (int *array, int offset, int size)
  6981. {
  6982.   int access (int *array, int index)
  6983.     { return array[index + offset]; }
  6984.   int i;
  6985.   ...
  6986.   for (i = 0; i < size; i++)
  6987.     ... access (array, i) ...
  6988. }
  6989.  
  6990. Nested function definitions are permitted within functions in the places where 
  6991. variable definitions are allowed; that is, in any block, before the first 
  6992. statement in the block. 
  6993.  
  6994. It is possible to call the nested function from outside the scope of its name 
  6995. by storing its address or passing the address to another function: 
  6996.  
  6997. hack (int *array, int size)
  6998. {
  6999.   void store (int index, int value)
  7000.     { array[index] = value; }
  7001.  
  7002.   intermediate (store, size);
  7003. }
  7004.  
  7005. Here, the function intermediate receives the address of store as an argument. 
  7006. If intermediate calls store, the arguments given to store are used to store 
  7007. into array. But this technique works only so long as the containing function 
  7008. (hack, in this example) does not exit. 
  7009.  
  7010. If you try to call the nested function through its address after the containing 
  7011. function has exited, all hell will break loose.  If you try to call it after a 
  7012. containing scope level has exited, and if it refers to some of the variables 
  7013. that are no longer in scope, you may be lucky, but it's not wise to take the 
  7014. risk.  If, however, the nested function does not refer to anything that has 
  7015. gone out of scope, you should be safe. 
  7016.  
  7017. GNU CC implements taking the address of a nested function using a technique 
  7018. called trampolines.  A paper describing them is available from `maya.idiap.ch' 
  7019. in directory `pub/tmb', file `usenix88-lexic.ps.Z'. 
  7020.  
  7021. A nested function can jump to a label inherited from a containing function, 
  7022. provided the label was explicitly declared in the containing function (see 
  7023. Local Labels).  Such a jump returns instantly to the containing function, 
  7024. exiting the nested function which did the goto and any intermediate functions 
  7025. as well.  Here is an example: 
  7026.  
  7027. bar (int *array, int offset, int size)
  7028. {
  7029.   __label__ failure;
  7030.   int access (int *array, int index)
  7031.     {
  7032.       if (index > size)
  7033.         goto failure;
  7034.       return array[index + offset];
  7035.     }
  7036.   int i;
  7037.   ...
  7038.   for (i = 0; i < size; i++)
  7039.     ... access (array, i) ...
  7040.   ...
  7041.   return 0;
  7042.  
  7043.  /* Control comes here from access
  7044.     if it detects an error.  */
  7045.  failure:
  7046.   return -1;
  7047. }
  7048.  
  7049. A nested function always has internal linkage.  Declaring one with extern is 
  7050. erroneous.  If you need to declare the nested function before its definition, 
  7051. use auto (which is otherwise meaningless for function declarations). 
  7052.  
  7053. bar (int *array, int offset, int size)
  7054. {
  7055.   __label__ failure;
  7056.   auto int access (int *, int);
  7057.   ...
  7058.   int access (int *array, int index)
  7059.     {
  7060.       if (index > size)
  7061.         goto failure;
  7062.       return array[index + offset];
  7063.     }
  7064.   ...
  7065. }
  7066.  
  7067.  
  7068. ΓòÉΓòÉΓòÉ 10.5. Constructing Function Calls ΓòÉΓòÉΓòÉ
  7069.  
  7070. Using the built-in functions described below, you can record the arguments a 
  7071. function received, and call another function with the same arguments, without 
  7072. knowing the number or types of the arguments. 
  7073.  
  7074. You can also record the return value of that function call, and later return 
  7075. that value, without knowing what data type the function tried to return (as 
  7076. long as your caller expects that data type). 
  7077.  
  7078.  __builtin_apply_args () 
  7079.            This built-in function returns a pointer of type void * to data 
  7080.            describing how to perform a call with the same arguments as were 
  7081.            passed to the current function. 
  7082.  
  7083.            The function saves the arg pointer register, structure value 
  7084.            address, and all registers that might be used to pass arguments to a 
  7085.            function into a block of memory allocated on the stack.  Then it 
  7086.            returns the address of that block. 
  7087.  
  7088.  __builtin_apply (function, arguments, size) 
  7089.            This built-in function invokes function (type void (*)()) with a 
  7090.            copy of the parameters described by arguments (type void *) and size 
  7091.            (type int). 
  7092.  
  7093.            The value of arguments should be the value returned by 
  7094.            __builtin_apply_args.  The argument size specifies the size of the 
  7095.            stack argument data, in bytes. 
  7096.  
  7097.            This function returns a pointer of type void * to data describing 
  7098.            how to return whatever value was returned by function.  The data is 
  7099.            saved in a block of memory allocated on the stack. 
  7100.  
  7101.            It is not always simple to compute the proper value for size.  The 
  7102.            value is used by __builtin_apply to compute the amount of data that 
  7103.            should be pushed on the stack and copied from the incoming argument 
  7104.            area. 
  7105.  
  7106.  __builtin_return (result) 
  7107.            This built-in function returns the value described by result from 
  7108.            the containing function.  You should specify, for result, a value 
  7109.            returned by __builtin_apply. 
  7110.  
  7111.  
  7112. ΓòÉΓòÉΓòÉ 10.6. Naming an Expression's Type ΓòÉΓòÉΓòÉ
  7113.  
  7114. You can give a name to the type of an expression using a typedef declaration 
  7115. with an initializer.  Here is how to define name as a type name for the type of 
  7116. exp: 
  7117.  
  7118. typedef name = exp;
  7119.  
  7120. This is useful in conjunction with the statements-within-expressions feature. 
  7121. Here is how the two together can be used to define a safe ``maximum'' macro 
  7122. that operates on any arithmetic type: 
  7123.  
  7124. #define max(a,b) \
  7125.   ({typedef _ta = (a), _tb = (b);  \
  7126.     _ta _a = (a); _tb _b = (b);     \
  7127.     _a > _b ? _a : _b; })
  7128.  
  7129. The reason for using names that start with underscores for the local variables 
  7130. is to avoid conflicts with variable names that occur within the expressions 
  7131. that are substituted for a and b.  Eventually we hope to design a new form of 
  7132. declaration syntax that allows you to declare variables whose scopes start only 
  7133. after their initializers; this will be a more reliable way to prevent such 
  7134. conflicts. 
  7135.  
  7136.  
  7137. ΓòÉΓòÉΓòÉ 10.7. Referring to a Type with typeof ΓòÉΓòÉΓòÉ
  7138.  
  7139. Another way to refer to the type of an expression is with typeof. The syntax of 
  7140. using of this keyword looks like sizeof, but the construct acts semantically 
  7141. like a type name defined with typedef. 
  7142.  
  7143. There are two ways of writing the argument to typeof: with an expression or 
  7144. with a type.  Here is an example with an expression: 
  7145.  
  7146. typeof (x[0](1))
  7147.  
  7148. This assumes that x is an array of functions; the type described is that of the 
  7149. values of the functions. 
  7150.  
  7151. Here is an example with a typename as the argument: 
  7152.  
  7153. typeof (int *)
  7154.  
  7155. Here the type described is that of pointers to int. 
  7156.  
  7157. If you are writing a header file that must work when included in ANSI C 
  7158. programs, write __typeof__ instead of typeof. See Alternate Keywords. 
  7159.  
  7160. A typeof-construct can be used anywhere a typedef name could be used.  For 
  7161. example, you can use it in a declaration, in a cast, or inside of sizeof or 
  7162. typeof. 
  7163.  
  7164.      This declares y with the type of what x points to. 
  7165.  
  7166.             typeof (*x) y;
  7167.  
  7168.      This declares y as an array of such values. 
  7169.  
  7170.             typeof (*x) y[4];
  7171.  
  7172.      This declares y as an array of pointers to characters: 
  7173.  
  7174.             typeof (typeof (char *)[4]) y;
  7175.  
  7176.       It is equivalent to the following traditional C declaration: 
  7177.  
  7178.             char *y[4];
  7179.  
  7180.       To see the meaning of the declaration using typeof, and why it might be a 
  7181.       useful way to write, let's rewrite it with these macros: 
  7182.  
  7183.             #define pointer(T)  typeof(T *)
  7184.             #define array(T, N) typeof(T [N])
  7185.  
  7186.       Now the declaration can be rewritten this way: 
  7187.  
  7188.             array (pointer (char), 4) y;
  7189.  
  7190.       Thus, array (pointer (char), 4) is the type of arrays of 4 pointers to 
  7191.       char. 
  7192.  
  7193.  
  7194. ΓòÉΓòÉΓòÉ 10.8. Generalized Lvalues ΓòÉΓòÉΓòÉ
  7195.  
  7196. Compound expressions, conditional expressions and casts are allowed as lvalues 
  7197. provided their operands are lvalues.  This means that you can take their 
  7198. addresses or store values into them. 
  7199.  
  7200. Standard C++ allows compound expressions and conditional expressions as 
  7201. lvalues, and permits casts to reference type, so use of this extension is 
  7202. deprecated for C++ code. 
  7203.  
  7204. For example, a compound expression can be assigned, provided the last 
  7205. expression in the sequence is an lvalue.  These two expressions are equivalent: 
  7206.  
  7207. (a, b) += 5
  7208. a, (b += 5)
  7209.  
  7210. Similarly, the address of the compound expression can be taken.  These two 
  7211. expressions are equivalent: 
  7212.  
  7213. &(a, b)
  7214. a, &b
  7215.  
  7216. A conditional expression is a valid lvalue if its type is not void and the true 
  7217. and false branches are both valid lvalues.  For example, these two expressions 
  7218. are equivalent: 
  7219.  
  7220. (a ? b : c) = 5
  7221. (a ? b = 5 : (c = 5))
  7222.  
  7223. A cast is a valid lvalue if its operand is an lvalue.  A simple assignment 
  7224. whose left-hand side is a cast works by converting the right-hand side first to 
  7225. the specified type, then to the type of the inner left-hand side expression. 
  7226. After this is stored, the value is converted back to the specified type to 
  7227. become the value of the assignment.  Thus, if a has type char *, the following 
  7228. two expressions are equivalent: 
  7229.  
  7230. (int)a = 5
  7231. (int)(a = (char *)(int)5)
  7232.  
  7233. An assignment-with-arithmetic operation such as `+=' applied to a cast performs 
  7234. the arithmetic using the type resulting from the cast, and then continues as in 
  7235. the previous case.  Therefore, these two expressions are equivalent: 
  7236.  
  7237. (int)a += 5
  7238. (int)(a = (char *)(int) ((int)a + 5))
  7239.  
  7240. You cannot take the address of an lvalue cast, because the use of its address 
  7241. would not work out coherently.  Suppose that &(int)f were permitted, where f 
  7242. has type float.  Then the following statement would try to store an integer 
  7243. bit-pattern where a floating point number belongs: 
  7244.  
  7245. *&(int)f = 1;
  7246.  
  7247. This is quite different from what (int)f = 1 would do---that would convert 1 to 
  7248. floating point and store it.  Rather than cause this inconsistency, we think it 
  7249. is better to prohibit use of `&' on a cast. 
  7250.  
  7251. If you really do want an int * pointer with the address of f, you can simply 
  7252. write (int *)&f. 
  7253.  
  7254.  
  7255. ΓòÉΓòÉΓòÉ 10.9. Conditionals with Omitted Operands ΓòÉΓòÉΓòÉ
  7256.  
  7257. The middle operand in a conditional expression may be omitted.  Then if the 
  7258. first operand is nonzero, its value is the value of the conditional expression. 
  7259.  
  7260. Therefore, the expression 
  7261.  
  7262. x ? : y
  7263.  
  7264. has the value of x if that is nonzero; otherwise, the value of y. 
  7265.  
  7266. This example is perfectly equivalent to 
  7267.  
  7268. x ? x : y
  7269.  
  7270. In this simple case, the ability to omit the middle operand is not especially 
  7271. useful.  When it becomes useful is when the first operand does, or may (if it 
  7272. is a macro argument), contain a side effect.  Then repeating the operand in the 
  7273. middle would perform the side effect twice.  Omitting the middle operand uses 
  7274. the value already computed without the undesirable effects of recomputing it. 
  7275.  
  7276.  
  7277. ΓòÉΓòÉΓòÉ 10.10. Double-Word Integers ΓòÉΓòÉΓòÉ
  7278.  
  7279. GNU C supports data types for integers that are twice as long as long int. 
  7280. Simply write long long int for a signed integer, or unsigned long long int for 
  7281. an unsigned integer. To make an integer constant of type long long int, add the 
  7282. suffix LL to the integer.  To make an integer constant of type unsigned long 
  7283. long int, add the suffix ULL to the integer. 
  7284.  
  7285. You can use these types in arithmetic like any other integer types. Addition, 
  7286. subtraction, and bitwise boolean operations on these types are open-coded on 
  7287. all types of machines.  Multiplication is open-coded if the machine supports 
  7288. fullword-to-doubleword a widening multiply instruction.  Division and shifts 
  7289. are open-coded only on machines that provide special support.  The operations 
  7290. that are not open-coded use special library routines that come with GNU CC. 
  7291.  
  7292. There may be pitfalls when you use long long types for function arguments, 
  7293. unless you declare function prototypes.  If a function expects type int for its 
  7294. argument, and you pass a value of type long long int, confusion will result 
  7295. because the caller and the subroutine will disagree about the number of bytes 
  7296. for the argument. Likewise, if the function expects long long int and you pass 
  7297. int.  The best way to avoid such problems is to use prototypes. 
  7298.  
  7299.  
  7300. ΓòÉΓòÉΓòÉ 10.11. Complex Numbers ΓòÉΓòÉΓòÉ
  7301.  
  7302. GNU C supports complex data types.  You can declare both complex integer types 
  7303. and complex floating types, using the keyword __complex__. 
  7304.  
  7305. For example, `__complex__ double x;' declares x as a variable whose real part 
  7306. and imaginary part are both of type double.  `__complex__ short int y;' 
  7307. declares y to have real and imaginary parts of type short int; this is not 
  7308. likely to be useful, but it shows that the set of complex types is complete. 
  7309.  
  7310. To write a constant with a complex data type, use the suffix `i' or `j' (either 
  7311. one; they are equivalent).  For example, 2.5fi has type __complex__ float and 
  7312. 3i has type __complex__ int.  Such a constant always has a pure imaginary 
  7313. value, but you can form any complex value you like by adding one to a real 
  7314. constant. 
  7315.  
  7316. To extract the real part of a complex-valued expression exp, write __real__ 
  7317. exp.  Likewise, use __imag__ to extract the imaginary part. 
  7318.  
  7319. The operator `~' performs complex conjugation when used on a value with a 
  7320. complex type. 
  7321.  
  7322. GNU CC can allocate complex automatic variables in a noncontiguous fashion; 
  7323. it's even possible for the real part to be in a register while the imaginary 
  7324. part is on the stack (or vice-versa).  None of the supported debugging info 
  7325. formats has a way to represent noncontiguous allocation like this, so GNU CC 
  7326. describes a noncontiguous complex variable as if it were two separate variables 
  7327. of noncomplex type. If the variable's actual name is foo, the two fictitious 
  7328. variables are named foo$real and foo$imag.  You can examine and set these two 
  7329. fictitious variables with your debugger. 
  7330.  
  7331. A future version of GDB will know how to recognize such pairs and treat them as 
  7332. a single variable with a complex type. 
  7333.  
  7334.  
  7335. ΓòÉΓòÉΓòÉ 10.12. Arrays of Length Zero ΓòÉΓòÉΓòÉ
  7336.  
  7337. Zero-length arrays are allowed in GNU C.  They are very useful as the last 
  7338. element of a structure which is really a header for a variable-length object: 
  7339.  
  7340. struct line {
  7341.   int length;
  7342.   char contents[0];
  7343. };
  7344.  
  7345. {
  7346.   struct line *thisline = (struct line *)
  7347.     malloc (sizeof (struct line) + this_length);
  7348.   thisline->length = this_length;
  7349. }
  7350.  
  7351. In standard C, you would have to give contents a length of 1, which means 
  7352. either you waste space or complicate the argument to malloc. 
  7353.  
  7354.  
  7355. ΓòÉΓòÉΓòÉ 10.13. Arrays of Variable Length ΓòÉΓòÉΓòÉ
  7356.  
  7357. Variable-length automatic arrays are allowed in GNU C.  These arrays are 
  7358. declared like any other automatic arrays, but with a length that is not a 
  7359. constant expression.  The storage is allocated at the point of declaration and 
  7360. deallocated when the brace-level is exited.  For example: 
  7361.  
  7362. FILE *
  7363. concat_fopen (char *s1, char *s2, char *mode)
  7364. {
  7365.   char str[strlen (s1) + strlen (s2) + 1];
  7366.   strcpy (str, s1);
  7367.   strcat (str, s2);
  7368.   return fopen (str, mode);
  7369. }
  7370.  
  7371. Jumping or breaking out of the scope of the array name deallocates the storage. 
  7372. Jumping into the scope is not allowed; you get an error message for it. 
  7373.  
  7374. You can use the function alloca to get an effect much like variable-length 
  7375. arrays.  The function alloca is available in many other C implementations (but 
  7376. not in all).  On the other hand, variable-length arrays are more elegant. 
  7377.  
  7378. There are other differences between these two methods.  Space allocated with 
  7379. alloca exists until the containing function returns. The space for a 
  7380. variable-length array is deallocated as soon as the array name's scope ends. 
  7381. (If you use both variable-length arrays and alloca in the same function, 
  7382. deallocation of a variable-length array will also deallocate anything more 
  7383. recently allocated with alloca.) 
  7384.  
  7385. You can also use variable-length arrays as arguments to functions: 
  7386.  
  7387. struct entry
  7388. tester (int len, char data[len][len])
  7389. {
  7390.   ...
  7391. }
  7392.  
  7393. The length of an array is computed once when the storage is allocated and is 
  7394. remembered for the scope of the array in case you access it with sizeof. 
  7395.  
  7396. If you want to pass the array first and the length afterward, you can use a 
  7397. forward declaration in the parameter list---another GNU extension. 
  7398.  
  7399. struct entry
  7400. tester (int len; char data[len][len], int len)
  7401. {
  7402.   ...
  7403. }
  7404.  
  7405. The `int len' before the semicolon is a parameter forward declaration, and it 
  7406. serves the purpose of making the name len known when the declaration of data is 
  7407. parsed. 
  7408.  
  7409. You can write any number of such parameter forward declarations in the 
  7410. parameter list.  They can be separated by commas or semicolons, but the last 
  7411. one must end with a semicolon, which is followed by the ``real'' parameter 
  7412. declarations.  Each forward declaration must match a ``real'' declaration in 
  7413. parameter name and data type. 
  7414.  
  7415.  
  7416. ΓòÉΓòÉΓòÉ 10.14. Macros with Variable Numbers of Arguments ΓòÉΓòÉΓòÉ
  7417.  
  7418. In GNU C, a macro can accept a variable number of arguments, much as a function 
  7419. can.  The syntax for defining the macro looks much like that used for a 
  7420. function.  Here is an example: 
  7421.  
  7422. #define eprintf(format, args...)  \
  7423.  fprintf (stderr, format , ## args)
  7424.  
  7425. Here args is a rest argument: it takes in zero or more arguments, as many as 
  7426. the call contains.  All of them plus the commas between them form the value of 
  7427. args, which is substituted into the macro body where args is used.  Thus, we 
  7428. have this expansion: 
  7429.  
  7430. eprintf ("%s:%d: ", input_file_name, line_number)
  7431. ->
  7432. fprintf (stderr, "%s:%d: " , input_file_name, line_number)
  7433.  
  7434. Note that the comma after the string constant comes from the definition of 
  7435. eprintf, whereas the last comma comes from the value of args. 
  7436.  
  7437. The reason for using `##' is to handle the case when args matches no arguments 
  7438. at all.  In this case, args has an empty value.  In this case, the second comma 
  7439. in the definition becomes an embarrassment: if it got through to the expansion 
  7440. of the macro, we would get something like this: 
  7441.  
  7442. fprintf (stderr, "success!\n" , )
  7443.  
  7444. which is invalid C syntax.  `##' gets rid of the comma, so we get the following 
  7445. instead: 
  7446.  
  7447. fprintf (stderr, "success!\n")
  7448.  
  7449. This is a special feature of the GNU C preprocessor: `##' before a rest 
  7450. argument that is empty discards the preceding sequence of non-whitespace 
  7451. characters from the macro definition.  (If another macro argument precedes, 
  7452. none of it is discarded.) 
  7453.  
  7454. It might be better to discard the last preprocessor token instead of the last 
  7455. preceding sequence of non-whitespace characters; in fact, we may someday change 
  7456. this feature to do so.  We advise you to write the macro definition so that the 
  7457. preceding sequence of non-whitespace characters is just a single token, so that 
  7458. the meaning will not change if we change the definition of this feature. 
  7459.  
  7460.  
  7461. ΓòÉΓòÉΓòÉ 10.15. Non-Lvalue Arrays May Have Subscripts ΓòÉΓòÉΓòÉ
  7462.  
  7463. Subscripting is allowed on arrays that are not lvalues, even though the unary 
  7464. `&' operator is not.  For example, this is valid in GNU C though not valid in 
  7465. other C dialects: 
  7466.  
  7467. struct foo {int a[4];};
  7468.  
  7469. struct foo f();
  7470.  
  7471. bar (int index)
  7472. {
  7473.   return f().a[index];
  7474. }
  7475.  
  7476.  
  7477. ΓòÉΓòÉΓòÉ 10.16. Arithmetic on void- and Function-Pointers ΓòÉΓòÉΓòÉ
  7478.  
  7479. In GNU C, addition and subtraction operations are supported on pointers to void 
  7480. and on pointers to functions.  This is done by treating the size of a void or 
  7481. of a function as 1. 
  7482.  
  7483. A consequence of this is that sizeof is also allowed on void and on function 
  7484. types, and returns 1. 
  7485.  
  7486. The option `-Wpointer-arith' requests a warning if these extensions are used. 
  7487.  
  7488.  
  7489. ΓòÉΓòÉΓòÉ 10.17. Non-Constant Initializers ΓòÉΓòÉΓòÉ
  7490.  
  7491. As in standard C++, the elements of an aggregate initializer for an automatic 
  7492. variable are not required to be constant expressions in GNU C. Here is an 
  7493. example of an initializer with run-time varying elements: 
  7494.  
  7495. foo (float f, float g)
  7496. {
  7497.   float beat_freqs[2] = { f-g, f+g };
  7498.   ...
  7499. }
  7500.  
  7501.  
  7502. ΓòÉΓòÉΓòÉ 10.18. Constructor Expressions ΓòÉΓòÉΓòÉ
  7503.  
  7504. GNU C supports constructor expressions.  A constructor looks like a cast 
  7505. containing an initializer.  Its value is an object of the type specified in the 
  7506. cast, containing the elements specified in the initializer. 
  7507.  
  7508. Usually, the specified type is a structure.  Assume that struct foo and 
  7509. structure are declared as shown: 
  7510.  
  7511. struct foo {int a; char b[2];} structure;
  7512.  
  7513. Here is an example of constructing a struct foo with a constructor: 
  7514.  
  7515. structure = ((struct foo) {x + y, 'a', 0});
  7516.  
  7517. This is equivalent to writing the following: 
  7518.  
  7519. {
  7520.   struct foo temp = {x + y, 'a', 0};
  7521.   structure = temp;
  7522. }
  7523.  
  7524. You can also construct an array.  If all the elements of the constructor are 
  7525. (made up of) simple constant expressions, suitable for use in initializers, 
  7526. then the constructor is an lvalue and can be coerced to a pointer to its first 
  7527. element, as shown here: 
  7528.  
  7529. char **foo = (char *[]) { "x", "y", "z" };
  7530.  
  7531. Array constructors whose elements are not simple constants are not very useful, 
  7532. because the constructor is not an lvalue.  There are only two valid ways to use 
  7533. it: to subscript it, or initialize an array variable with it.  The former is 
  7534. probably slower than a switch statement, while the latter does the same thing 
  7535. an ordinary C initializer would do.  Here is an example of subscripting an 
  7536. array constructor: 
  7537.  
  7538. output = ((int[]) { 2, x, 28 }) [input];
  7539.  
  7540. Constructor expressions for scalar types and union types are is also allowed, 
  7541. but then the constructor expression is equivalent to a cast. 
  7542.  
  7543.  
  7544. ΓòÉΓòÉΓòÉ 10.19. Labeled Elements in Initializers ΓòÉΓòÉΓòÉ
  7545.  
  7546. Standard C requires the elements of an initializer to appear in a fixed order, 
  7547. the same as the order of the elements in the array or structure being 
  7548. initialized. 
  7549.  
  7550. In GNU C you can give the elements in any order, specifying the array indices 
  7551. or structure field names they apply to.  This extension is not implemented in 
  7552. GNU C++. 
  7553.  
  7554. To specify an array index, write `[index]' or `[index] =' before the element 
  7555. value.  For example, 
  7556.  
  7557. int a[6] = { [4] 29, [2] = 15 };
  7558.  
  7559. is equivalent to 
  7560.  
  7561. int a[6] = { 0, 0, 15, 0, 29, 0 };
  7562.  
  7563. The index values must be constant expressions, even if the array being 
  7564. initialized is automatic. 
  7565.  
  7566. To initialize a range of elements to the same value, write `[first ... last] = 
  7567. value'.  For example, 
  7568.  
  7569. int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
  7570.  
  7571. Note that the length of the array is the highest value specified plus one. 
  7572.  
  7573. In a structure initializer, specify the name of a field to initialize with 
  7574. `fieldname:' before the element value.  For example, given the following 
  7575. structure, 
  7576.  
  7577. struct point { int x, y; };
  7578.  
  7579. the following initialization 
  7580.  
  7581. struct point p = { y: yvalue, x: xvalue };
  7582.  
  7583. is equivalent to 
  7584.  
  7585. struct point p = { xvalue, yvalue };
  7586.  
  7587. Another syntax which has the same meaning is `.fieldname ='., as shown here: 
  7588.  
  7589. struct point p = { .y = yvalue, .x = xvalue };
  7590.  
  7591. You can also use an element label (with either the colon syntax or the 
  7592. period-equal syntax) when initializing a union, to specify which element of the 
  7593. union should be used.  For example, 
  7594.  
  7595. union foo { int i; double d; };
  7596.  
  7597. union foo f = { d: 4 };
  7598.  
  7599. will convert 4 to a double to store it in the union using the second element. 
  7600. By contrast, casting 4 to type union foo would store it into the union as the 
  7601. integer i, since it is an integer.  (See Cast to Union.) 
  7602.  
  7603. You can combine this technique of naming elements with ordinary C 
  7604. initialization of successive elements.  Each initializer element that does not 
  7605. have a label applies to the next consecutive element of the array or structure. 
  7606. For example, 
  7607.  
  7608. int a[6] = { [1] = v1, v2, [4] = v4 };
  7609.  
  7610. is equivalent to 
  7611.  
  7612. int a[6] = { 0, v1, v2, 0, v4, 0 };
  7613.  
  7614. Labeling the elements of an array initializer is especially useful when the 
  7615. indices are characters or belong to an enum type. For example: 
  7616.  
  7617. int whitespace[256]
  7618.   = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
  7619.       ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
  7620.  
  7621.  
  7622. ΓòÉΓòÉΓòÉ 10.20. Case Ranges ΓòÉΓòÉΓòÉ
  7623.  
  7624. You can specify a range of consecutive values in a single case label, like 
  7625. this: 
  7626.  
  7627. case low ... high:
  7628.  
  7629. This has the same effect as the proper number of individual case labels, one 
  7630. for each integer value from low to high, inclusive. 
  7631.  
  7632. This feature is especially useful for ranges of ASCII character codes: 
  7633.  
  7634. case 'A' ... 'Z':
  7635.  
  7636. *Be careful:* Write spaces around the ..., for otherwise it may be parsed wrong 
  7637. when you use it with integer values.  For example, write this: 
  7638.  
  7639. case 1 ... 5:
  7640.  
  7641. rather than this: 
  7642.  
  7643. case 1...5:
  7644.  
  7645.  
  7646. ΓòÉΓòÉΓòÉ 10.21. Cast to a Union Type ΓòÉΓòÉΓòÉ
  7647.  
  7648. A cast to union type is similar to other casts, except that the type specified 
  7649. is a union type.  You can specify the type either with union tag or with a 
  7650. typedef name.  A cast to union is actually a constructor though, not a cast, 
  7651. and hence does not yield an lvalue like normal casts.  (See Constructors.) 
  7652.  
  7653. The types that may be cast to the union type are those of the members of the 
  7654. union.  Thus, given the following union and variables: 
  7655.  
  7656. union foo { int i; double d; };
  7657. int x;
  7658. double y;
  7659.  
  7660. both x and y can be cast to type union foo. 
  7661.  
  7662. Using the cast as the right-hand side of an assignment to a variable of union 
  7663. type is equivalent to storing in a member of the union: 
  7664.  
  7665. union foo u;
  7666. ...
  7667. u = (union foo) x  ==  u.i = x
  7668. u = (union foo) y  ==  u.d = y
  7669.  
  7670. You can also use the union cast as a function argument: 
  7671.  
  7672. void hack (union foo);
  7673. ...
  7674. hack ((union foo) x);
  7675.  
  7676.  
  7677. ΓòÉΓòÉΓòÉ 10.22. Declaring Attributes of Functions ΓòÉΓòÉΓòÉ
  7678.  
  7679. In GNU C, you declare certain things about functions called in your program 
  7680. which help the compiler optimize function calls and check your code more 
  7681. carefully. 
  7682.  
  7683. The keyword __attribute__ allows you to specify special attributes when making 
  7684. a declaration.  This keyword is followed by an attribute specification inside 
  7685. double parentheses.  Eight attributes, noreturn, const, format, section, 
  7686. constructor, destructor, unused and weak are currently defined for functions. 
  7687. Other attributes, including section are supported for variables declarations ( 
  7688. see Variable Attributes) and for types (see Type Attributes). 
  7689.  
  7690. You may also specify attributes with `__' preceding and following each keyword. 
  7691. This allows you to use them in header files without being concerned about a 
  7692. possible macro of the same name.  For example, you may use __noreturn__ instead 
  7693. of noreturn. 
  7694.  
  7695.  noreturn 
  7696.            A few standard library functions, such as abort and exit, cannot 
  7697.            return.  GNU CC knows this automatically.  Some programs define 
  7698.            their own functions that never return.  You can declare them 
  7699.            noreturn to tell the compiler this fact.  For example, 
  7700.  
  7701.                       void fatal () __attribute__ ((noreturn));
  7702.  
  7703.                       void
  7704.                       fatal (...)
  7705.                       {
  7706.                         ... /* Print error message. */ ...
  7707.                         exit (1);
  7708.                       }
  7709.  
  7710.            The noreturn keyword tells the compiler to assume that fatal cannot 
  7711.            return.  It can then optimize without regard to what would happen if 
  7712.            fatal ever did return.  This makes slightly better code.  More 
  7713.            importantly, it helps avoid spurious warnings of uninitialized 
  7714.            variables. 
  7715.  
  7716.            Do not assume that registers saved by the calling function are 
  7717.            restored before calling the noreturn function. 
  7718.  
  7719.            It does not make sense for a noreturn function to have a return type 
  7720.            other than void. 
  7721.  
  7722.            The attribute noreturn is not implemented in GNU C versions earlier 
  7723.            than 2.5.  An alternative way to declare that a function does not 
  7724.            return, which works in the current version and in some older 
  7725.            versions, is as follows: 
  7726.  
  7727.                       typedef void voidfn ();
  7728.  
  7729.                       volatile voidfn fatal;
  7730.  
  7731.  const 
  7732.            Many functions do not examine any values except their arguments, and 
  7733.            have no effects except the return value.  Such a function can be 
  7734.            subject to common subexpression elimination and loop optimization 
  7735.            just as an arithmetic operator would be.  These functions should be 
  7736.            declared with the attribute const.  For example, 
  7737.  
  7738.                       int square (int) __attribute__ ((const));
  7739.  
  7740.            says that the hypothetical function square is safe to call fewer 
  7741.            times than the program says. 
  7742.  
  7743.            The attribute const is not implemented in GNU C versions earlier 
  7744.            than 2.5.  An alternative way to declare that a function has no side 
  7745.            effects, which works in the current version and in some older 
  7746.            versions, is as follows: 
  7747.  
  7748.                       typedef int intfn ();
  7749.  
  7750.                       extern const intfn square;
  7751.  
  7752.            This approach does not work in GNU C++ from 2.6.0 on, since the 
  7753.            language specifies that the `const' must be attached to the return 
  7754.            value. 
  7755.  
  7756.            Note that a function that has pointer arguments and examines the 
  7757.            data pointed to must not be declared const.  Likewise, a function 
  7758.            that calls a non-const function usually must not be const.  It does 
  7759.            not make sense for a const function to return void. 
  7760.  
  7761.  format (archetype, string-index, first-to-check) 
  7762.            The format attribute specifies that a function takes printf or scanf 
  7763.            style arguments which should be type-checked against a format 
  7764.            string.  For example, the declaration: 
  7765.  
  7766.                       extern int
  7767.                       my_printf (void *my_object, const char *my_format, ...)
  7768.                             __attribute__ ((format (printf, 2, 3)));
  7769.  
  7770.            causes the compiler to check the arguments in calls to my_printf for 
  7771.            consistency with the printf style format string argument my_format. 
  7772.  
  7773.            The parameter archetype determines how the format string is 
  7774.            interpreted, and should be either printf or scanf.  The parameter 
  7775.            string-index specifies which argument is the format string argument 
  7776.            (starting from 1), while first-to-check is the number of the first 
  7777.            argument to check against the format string.  For functions where 
  7778.            the arguments are not available to be checked (such as vprintf), 
  7779.            specify the third parameter as zero.  In this case the compiler only 
  7780.            checks the format string for consistency. 
  7781.  
  7782.            In the example above, the format string (my_format) is the second 
  7783.            argument of the function my_print, and the arguments to check start 
  7784.            with the third argument, so the correct parameters for the format 
  7785.            attribute are 2 and 3. 
  7786.  
  7787.            The format attribute allows you to identify your own functions which 
  7788.            take format strings as arguments, so that GNU CC can check the calls 
  7789.            to these functions for errors.  The compiler always checks formats 
  7790.            for the ANSI library functions printf, fprintf, sprintf, scanf, 
  7791.            fscanf, sscanf, vprintf, vfprintf and vsprintf whenever such 
  7792.            warnings are requested (using `-Wformat'), so there is no need to 
  7793.            modify the header file `stdio.h'. 
  7794.  
  7795.  section ("section-name") 
  7796.            Normally, the compiler places the code it generates in the text 
  7797.            section. Sometimes, however, you need additional sections, or you 
  7798.            need certain particular functions to appear in special sections. 
  7799.            The section attribute specifies that a function lives in a 
  7800.            particular section. For example, the declaration: 
  7801.  
  7802.                       extern void foobar (void) __attribute__ ((section ("bar")));
  7803.  
  7804.            puts the function foobar in the bar section. 
  7805.  
  7806.            Some file formats do not support arbitrary sections so the section 
  7807.            attribute is not available on all platforms. If you need to map the 
  7808.            entire contents of a module to a particular section, consider using 
  7809.            the facilities of the linker instead. 
  7810.  
  7811.  constructor 
  7812.  destructor 
  7813.            The constructor attribute causes the function to be called 
  7814.            automatically before execution enters main ().  Similarly, the 
  7815.            destructor attribute causes the function to be called automatically 
  7816.            after main () has completed or exit () has been called.  Functions 
  7817.            with these attributes are useful for initializing data that will be 
  7818.            used implicitly during the execution of the program. 
  7819.  
  7820.            These attributes are not currently implemented for Objective C. 
  7821.  
  7822.  unused 
  7823.            This attribute, attached to a function, means that the function is 
  7824.            meant to be possibly unused.  GNU CC will not produce a warning for 
  7825.            this function. 
  7826.  
  7827.  weak 
  7828.            The weak attribute causes the declaration to be emitted as a weak 
  7829.            symbol rather than a global.  This is primarily useful in defining 
  7830.            library functions which can be overridden in user code, though it 
  7831.            can also be used with non-function declarations.  Weak symbols are 
  7832.            supported for ELF targets, and also for a.out targets when using the 
  7833.            GNU assembler and linker. 
  7834.  
  7835.  alias ("target") 
  7836.            The alias attribute causes the declaration to be emitted as an alias 
  7837.            for another symbol, which must be specified.  For instance, 
  7838.  
  7839.                       void __f () { /* do something */; }
  7840.                       void f () __attribute__ ((weak, alias ("__f")));
  7841.  
  7842.            declares `f' to be a weak alias for `__f'.  In C ++, the mangled 
  7843.            name for the target must be used. 
  7844.  
  7845.  regparm (number) 
  7846.            On the Intel 386, the regparm attribute causes the compiler to pass 
  7847.            up to number integer arguments in registers EAX, EDX, and ECX 
  7848.            instead of on the stack.  Functions that take a variable number of 
  7849.            arguments will continue to be passed all of their arguments on the 
  7850.            stack. 
  7851.  
  7852.  stdcall 
  7853.            On the Intel 386, the stdcall attribute causes the compiler to 
  7854.            assume that the called function will pop off the stack space used to 
  7855.            pass arguments, unless it takes a variable number of arguments. 
  7856.  
  7857.  cdecl 
  7858.            On the Intel 386, the cdecl attribute causes the compiler to assume 
  7859.            that the called function will pop off the stack space used to pass 
  7860.            arguments, unless it takes a variable number of arguments.  This is 
  7861.            useful to override the effects of the `-mrtd' switch. 
  7862.  
  7863.  You can specify multiple attributes in a declaration by separating them by 
  7864.  commas within the double parentheses or by immediately following an attribute 
  7865.  declaration with another attribute declaration. 
  7866.  
  7867.  Some people object to the __attribute__ feature, suggesting that ANSI C's 
  7868.  #pragma should be used instead.  There are two reasons for not doing this. 
  7869.  
  7870.    1. It is impossible to generate #pragma commands from a macro. 
  7871.  
  7872.    2. There is no telling what the same #pragma might mean in another compiler. 
  7873.  
  7874.  These two reasons apply to almost any application that might be proposed for 
  7875.  #pragma.  It is basically a mistake to use #pragma for anything. 
  7876.  
  7877.  
  7878. ΓòÉΓòÉΓòÉ 10.23. Prototypes and Old-Style Function Definitions ΓòÉΓòÉΓòÉ
  7879.  
  7880. GNU C extends ANSI C to allow a function prototype to override a later 
  7881. old-style non-prototype definition.  Consider the following example: 
  7882.  
  7883. /* Use prototypes unless the compiler is old-fashioned.  */
  7884. #if __STDC__
  7885. #define P(x) x
  7886. #else
  7887. #define P(x) ()
  7888. #endif
  7889.  
  7890. /* Prototype function declaration.  */
  7891. int isroot P((uid_t));
  7892.  
  7893. /* Old-style function definition.  */
  7894. int
  7895. isroot (x)   /* ??? lossage here ??? */
  7896.      uid_t x;
  7897. {
  7898.   return x == 0;
  7899. }
  7900.  
  7901. Suppose the type uid_t happens to be short.  ANSI C does not allow this 
  7902. example, because subword arguments in old-style non-prototype definitions are 
  7903. promoted.  Therefore in this example the function definition's argument is 
  7904. really an int, which does not match the prototype argument type of short. 
  7905.  
  7906. This restriction of ANSI C makes it hard to write code that is portable to 
  7907. traditional C compilers, because the programmer does not know whether the uid_t 
  7908. type is short, int, or long.  Therefore, in cases like these GNU C allows a 
  7909. prototype to override a later old-style definition.  More precisely, in GNU C, 
  7910. a function prototype argument type overrides the argument type specified by a 
  7911. later old-style definition if the former type is the same as the latter type 
  7912. before promotion.  Thus in GNU C the above example is equivalent to the 
  7913. following: 
  7914.  
  7915. int isroot (uid_t);
  7916.  
  7917. int
  7918. isroot (uid_t x)
  7919. {
  7920.   return x == 0;
  7921. }
  7922.  
  7923. GNU C++ does not support old-style function definitions, so this extension is 
  7924. irrelevant. 
  7925.  
  7926.  
  7927. ΓòÉΓòÉΓòÉ 10.24. C++ Style Comments ΓòÉΓòÉΓòÉ
  7928.  
  7929. In GNU C, you may use C++ style comments, which start with `//' and continue 
  7930. until the end of the line.  Many other C implementations allow such comments, 
  7931. and they are likely to be in a future C standard. However, C++ style comments 
  7932. are not recognized if you specify `-ansi' or `-traditional', since they are 
  7933. incompatible with traditional constructs like dividend//*comment*/divisor. 
  7934.  
  7935.  
  7936. ΓòÉΓòÉΓòÉ 10.25. Dollar Signs in Identifier Names ΓòÉΓòÉΓòÉ
  7937.  
  7938. In GNU C, you may use dollar signs in identifier names.  This is because many 
  7939. traditional C implementations allow such identifiers. 
  7940.  
  7941. On some machines, dollar signs are allowed in identifiers if you specify 
  7942. `-traditional'.  On a few systems they are allowed by default, even if you do 
  7943. not use `-traditional'.  But they are never allowed if you specify `-ansi'. 
  7944.  
  7945. There are certain ANSI C programs (obscure, to be sure) that would compile 
  7946. incorrectly if dollar signs were permitted in identifiers.  For example: 
  7947.  
  7948. #define foo(a) #a
  7949. #define lose(b) foo (b)
  7950. #define test$
  7951. lose (test)
  7952.  
  7953.  
  7954. ΓòÉΓòÉΓòÉ 10.26. The Character ESC in Constants ΓòÉΓòÉΓòÉ
  7955.  
  7956. You can use the sequence `\e' in a string or character constant to stand for 
  7957. the ASCII character ESC. 
  7958.  
  7959.  
  7960. ΓòÉΓòÉΓòÉ 10.27. Inquiring on Alignment of Types or Variables ΓòÉΓòÉΓòÉ
  7961.  
  7962. The keyword __alignof__ allows you to inquire about how an object is aligned, 
  7963. or the minimum alignment usually required by a type.  Its syntax is just like 
  7964. sizeof. 
  7965.  
  7966. For example, if the target machine requires a double value to be aligned on an 
  7967. 8-byte boundary, then __alignof__ (double) is 8. This is true on many RISC 
  7968. machines.  On more traditional machine designs, __alignof__ (double) is 4 or 
  7969. even 2. 
  7970.  
  7971. Some machines never actually require alignment; they allow reference to any 
  7972. data type even at an odd addresses.  For these machines, __alignof__ reports 
  7973. the recommended alignment of a type. 
  7974.  
  7975. When the operand of __alignof__ is an lvalue rather than a type, the value is 
  7976. the largest alignment that the lvalue is known to have.  It may have this 
  7977. alignment as a result of its data type, or because it is part of a structure 
  7978. and inherits alignment from that structure.  For example, after this 
  7979. declaration: 
  7980.  
  7981. struct foo { int x; char y; } foo1;
  7982.  
  7983. the value of __alignof__ (foo1.y) is probably 2 or 4, the same as __alignof__ 
  7984. (int), even though the data type of foo1.y does not itself demand any 
  7985. alignment. 
  7986.  
  7987. A related feature which lets you specify the alignment of an object is 
  7988. __attribute__ ((aligned (alignment))); see the following section. 
  7989.  
  7990.  
  7991. ΓòÉΓòÉΓòÉ 10.28. Specifying Attributes of Variables ΓòÉΓòÉΓòÉ
  7992.  
  7993. The keyword __attribute__ allows you to specify special attributes of variables 
  7994. or structure fields.  This keyword is followed by an attribute specification 
  7995. inside double parentheses.  Eight attributes are currently defined for 
  7996. variables: aligned, mode, nocommon, packed, section, transparent_union, unused, 
  7997. and weak.  Other attributes are available for functions (see Function 
  7998. Attributes) and for types (see Type Attributes). 
  7999.  
  8000. You may also specify attributes with `__' preceding and following each keyword. 
  8001. This allows you to use them in header files without being concerned about a 
  8002. possible macro of the same name.  For example, you may use __aligned__ instead 
  8003. of aligned. 
  8004.  
  8005.  aligned (alignment) 
  8006.            This attribute specifies a minimum alignment for the variable or 
  8007.            structure field, measured in bytes.  For example, the declaration: 
  8008.  
  8009.                       int x __attribute__ ((aligned (16))) = 0;
  8010.  
  8011.            causes the compiler to allocate the global variable x on a 16-byte 
  8012.            boundary.  On a 68040, this could be used in conjunction with an asm 
  8013.            expression to access the move16 instruction which requires 16-byte 
  8014.            aligned operands. 
  8015.  
  8016.            You can also specify the alignment of structure fields.  For 
  8017.            example, to create a double-word aligned int pair, you could write: 
  8018.  
  8019.                       struct foo { int x[2] __attribute__ ((aligned (8))); };
  8020.  
  8021.            This is an alternative to creating a union with a double member that 
  8022.            forces the union to be double-word aligned. 
  8023.  
  8024.            It is not possible to specify the alignment of functions; the 
  8025.            alignment of functions is determined by the machine's requirements 
  8026.            and cannot be changed.  You cannot specify alignment for a typedef 
  8027.            name because such a name is just an alias, not a distinct type. 
  8028.  
  8029.            As in the preceding examples, you can explicitly specify the 
  8030.            alignment (in bytes) that you wish the compiler to use for a given 
  8031.            variable or structure field.  Alternatively, you can leave out the 
  8032.            alignment factor and just ask the compiler to align a variable or 
  8033.            field to the maximum useful alignment for the target machine you are 
  8034.            compiling for.  For example, you could write: 
  8035.  
  8036.                       short array[3] __attribute__ ((aligned));
  8037.  
  8038.            Whenever you leave out the alignment factor in an aligned attribute 
  8039.            specification, the compiler automatically sets the alignment for the 
  8040.            declared variable or field to the largest alignment which is ever 
  8041.            used for any data type on the target machine you are compiling for. 
  8042.            Doing this can often make copy operations more efficient, because 
  8043.            the compiler can use whatever instructions copy the biggest chunks 
  8044.            of memory when performing copies to or from the variables or fields 
  8045.            that you have aligned this way. 
  8046.  
  8047.            The aligned attribute can only increase the alignment; but you can 
  8048.            decrease it by specifying packed as well.  See below. 
  8049.  
  8050.            Note that the effectiveness of aligned attributes may be limited by 
  8051.            inherent limitations in your linker.  On many systems, the linker is 
  8052.            only able to arrange for variables to be aligned up to a certain 
  8053.            maximum alignment.  (For some linkers, the maximum supported 
  8054.            alignment may be very very small.)  If your linker is only able to 
  8055.            align variables up to a maximum of 8 byte alignment, then specifying 
  8056.            aligned(16) in an __attribute__ will still only provide you with 8 
  8057.            byte alignment.  See your linker documentation for further 
  8058.            information. 
  8059.  
  8060.  mode (mode) 
  8061.            This attribute specifies the data type for the 
  8062.            declaration---whichever type corresponds to the mode mode.  This in 
  8063.            effect lets you request an integer or floating point type according 
  8064.            to its width. 
  8065.  
  8066.            You may also specify a mode of `byte' or `__byte__' to indicate the 
  8067.            mode corresponding to a one-byte integer, `word' or `__word__' for 
  8068.            the mode of a one-word integer, and `pointer' or `__pointer__' for 
  8069.            the mode used to represent pointers. 
  8070.  
  8071.  nocommon 
  8072.            This attribute specifies requests GNU CC not to place a variable 
  8073.            ``common'' but instead to allocate space for it directly.  If you 
  8074.            specify the `-fno-common' flag, GNU CC will do this for all 
  8075.            variables. 
  8076.  
  8077.            Specifying the nocommon attribute for a variable provides an 
  8078.            initialization of zeros.  A variable may only be initialized in one 
  8079.            source file. 
  8080.  
  8081.  packed 
  8082.            The packed attribute specifies that a variable or structure field 
  8083.            should have the smallest possible alignment---one byte for a 
  8084.            variable, and one bit for a field, unless you specify a larger value 
  8085.            with the aligned attribute. 
  8086.  
  8087.            Here is a structure in which the field x is packed, so that it 
  8088.            immediately follows a: 
  8089.  
  8090.                       struct foo
  8091.                       {
  8092.                         char a;
  8093.                         int x[2] __attribute__ ((packed));
  8094.                       };
  8095.  
  8096.  section ("section-name") 
  8097.            Normally, the compiler places the objects it generates in sections 
  8098.            like data and bss.  Sometimes, however, you need additional 
  8099.            sections, or you need certain particular variables to appear in 
  8100.            special sections, for example to map to special hardware.  The 
  8101.            section attribute specifies that a variable (or function) lives in a 
  8102.            particular section.  For example, this small program uses several 
  8103.            specific section names: 
  8104.  
  8105.                       struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
  8106.                       struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
  8107.                       char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
  8108.                       int init_data_copy __attribute__ ((section ("INITDATACOPY"))) = 0;
  8109.  
  8110.                       main()
  8111.                       {
  8112.                         /* Initialize stack pointer */
  8113.                         init_sp (stack + sizeof (stack));
  8114.  
  8115.                         /* Initialize initialized data */
  8116.                         memcpy (&init_data_copy, &data, &edata - &data);
  8117.  
  8118.                         /* Turn on the serial ports */
  8119.                         init_duart (&a);
  8120.                         init_duart (&b);
  8121.                       }
  8122.  
  8123.            Use the section attribute with an initialized definition of a global 
  8124.            variable, as shown in the example.  GNU CC issues a warning and 
  8125.            otherwise ignores the section attribute in uninitialized variable 
  8126.            declarations. 
  8127.  
  8128.            You may only use the section attribute with a fully initialized 
  8129.            global definition because of the way linkers work.  The linker 
  8130.            requires each object be defined once, with the exception that 
  8131.            uninitialized variables tentatively go in the common (or bss) 
  8132.            section and can be multiply "defined".  You can force a variable to 
  8133.            be initialized with the `-fno-common' flag or the nocommon 
  8134.            attribute. 
  8135.  
  8136.            Some file formats do not support arbitrary sections so the section 
  8137.            attribute is not available on all platforms. If you need to map the 
  8138.            entire contents of a module to a particular section, consider using 
  8139.            the facilities of the linker instead. 
  8140.  
  8141.  transparent_union 
  8142.            This attribute, attached to a function argument variable which is a 
  8143.            union, means to pass the argument in the same way that the first 
  8144.            union member would be passed.  You can also use this attribute on a 
  8145.            typedef for a union data type; then it applies to all function 
  8146.            arguments with that type. 
  8147.  
  8148.  unused 
  8149.            This attribute, attached to a variable, means that the variable is 
  8150.            meant to be possibly unused.  GNU CC will not produce a warning for 
  8151.            this variable. 
  8152.  
  8153.  weak 
  8154.            The weak attribute is described in See Function Attributes. 
  8155.  
  8156.  To specify multiple attributes, separate them by commas within the double 
  8157.  parentheses: for example, `__attribute__ ((aligned (16), packed))'. 
  8158.  
  8159.  
  8160. ΓòÉΓòÉΓòÉ 10.29. Specifying Attributes of Types ΓòÉΓòÉΓòÉ
  8161.  
  8162. The keyword __attribute__ allows you to specify special attributes of struct 
  8163. and union types when you define such types.  This keyword is followed by an 
  8164. attribute specification inside double parentheses.  Three attributes are 
  8165. currently defined for types: aligned, packed, and transparent_union.  Other 
  8166. attributes are defined for functions (see Function Attributes) and for 
  8167. variables (see Variable Attributes). 
  8168.  
  8169. You may also specify any one of these attributes with `__' preceding and 
  8170. following its keyword.  This allows you to use these attributes in header files 
  8171. without being concerned about a possible macro of the same name.  For example, 
  8172. you may use __aligned__ instead of aligned. 
  8173.  
  8174. You may specify the aligned and transparent_union attributes either in a 
  8175. typedef declaration or just past the closing curly brace of a complete enum, 
  8176. struct or union type definition and the packed attribute only past the closing 
  8177. brace of a definition. 
  8178.  
  8179.  aligned (alignment) 
  8180.            This attribute specifies a minimum alignment (in bytes) for 
  8181.            variables of the specified type.  For example, the declarations: 
  8182.  
  8183.                       struct S { short f[3]; } __attribute__ ((aligned (8));
  8184.                       typedef int more_aligned_int __attribute__ ((aligned (8));
  8185.  
  8186.            force the compiler to insure (as fas as it can) that each variable 
  8187.            whose type is struct S or more_aligned_int will be allocated and 
  8188.            aligned at least on a 8-byte boundary.  On a Sparc, having all 
  8189.            variables of type struct S aligned to 8-byte boundaries allows the 
  8190.            compiler to use the ldd and std (doubleword load and store) 
  8191.            instructions when copying one variable of type struct S to another, 
  8192.            thus improving run-time efficiency. 
  8193.  
  8194.            Note that the alignment of any given struct or union type is 
  8195.            required by the ANSI C standard to be at least a perfect multiple of 
  8196.            the lowest common multiple of the alignments of all of the members 
  8197.            of the struct or union in question.  This means that you can 
  8198.            effectively adjust the alignment of a struct or union type by 
  8199.            attaching an aligned attribute to any one of the members of such a 
  8200.            type, but the notation illustrated in the example above is a more 
  8201.            obvious, intuitive, and readable way to request the compiler to 
  8202.            adjust the alignment of an entire struct or union type. 
  8203.  
  8204.            As in the preceding example, you can explicitly specify the 
  8205.            alignment (in bytes) that you wish the compiler to use for a given 
  8206.            struct or union type.  Alternatively, you can leave out the 
  8207.            alignment factor and just ask the compiler to align a type to the 
  8208.            maximum useful alignment for the target machine you are compiling 
  8209.            for.  For example, you could write: 
  8210.  
  8211.                       struct S { short f[3]; } __attribute__ ((aligned));
  8212.  
  8213.            Whenever you leave out the alignment factor in an aligned attribute 
  8214.            specification, the compiler automatically sets the alignment for the 
  8215.            type to the largest alignment which is ever used for any data type 
  8216.            on the target machine you are compiling for.  Doing this can often 
  8217.            make copy operations more efficient, because the compiler can use 
  8218.            whatever instructions copy the biggest chunks of memory when 
  8219.            performing copies to or from the variables which have types that you 
  8220.            have aligned this way. 
  8221.  
  8222.            In the example above, if the size of each short is 2 bytes, then the 
  8223.            size of the entire struct S type is 6 bytes.  The smallest power of 
  8224.            two which is greater than or equal to that is 8, so the compiler 
  8225.            sets the alignment for the entire struct S type to 8 bytes. 
  8226.  
  8227.            Note that although you can ask the compiler to select a 
  8228.            time-efficient alignment for a given type and then declare only 
  8229.            individual stand-alone objects of that type, the compiler's ability 
  8230.            to select a time-efficient alignment is primarily useful only when 
  8231.            you plan to create arrays of variables having the relevant 
  8232.            (efficiently aligned) type.  If you declare or use arrays of 
  8233.            variables of an efficiently-aligned type, then it is likely that 
  8234.            your program will also be doing pointer arithmetic (or subscripting, 
  8235.            which amounts to the same thing) on pointers to the relevant type, 
  8236.            and the code that the compiler generates for these pointer 
  8237.            arithmetic operations will often be more efficient for 
  8238.            efficiently-aligned types than for other types. 
  8239.  
  8240.            The aligned attribute can only increase the alignment; but you can 
  8241.            decrease it by specifying packed as well.  See below. 
  8242.  
  8243.            Note that the effectiveness of aligned attributes may be limited by 
  8244.            inherent limitations in your linker.  On many systems, the linker is 
  8245.            only able to arrange for variables to be aligned up to a certain 
  8246.            maximum alignment.  (For some linkers, the maximum supported 
  8247.            alignment may be very very small.)  If your linker is only able to 
  8248.            align variables up to a maximum of 8 byte alignment, then specifying 
  8249.            aligned(16) in an __attribute__ will still only provide you with 8 
  8250.            byte alignment.  See your linker documentation for further 
  8251.            information. 
  8252.  
  8253.  packed 
  8254.            This attribute, attached to an enum, struct, or union type 
  8255.            definition, specified that the minimum required memory be used to 
  8256.            represent the type. 
  8257.  
  8258.            Specifying this attribute for struct and union types is equivalent 
  8259.            to specifying the packed attribute on each of the structure or union 
  8260.            members.  Specifying the `-fshort-enums' flag on the line is 
  8261.            equivalent to specifying the packed attribute on all enum 
  8262.            definitions. 
  8263.  
  8264.            You may only specify this attribute after a closing curly brace on 
  8265.            an enum definition, not in a typedef declaration. 
  8266.  
  8267.  transparent_union 
  8268.            This attribute, attached to a union type definition, indicates that 
  8269.            any variable having that union type should, if passed to a function, 
  8270.            be passed in the same way that the first union member would be 
  8271.            passed.  For example: 
  8272.  
  8273.                       union foo
  8274.                       {
  8275.                         char a;
  8276.                         int x[2];
  8277.                       } __attribute__ ((transparent_union));
  8278.  
  8279.  To specify multiple attributes, separate them by commas within the double 
  8280.  parentheses: for example, `__attribute__ ((aligned (16), packed))'. 
  8281.  
  8282.  
  8283. ΓòÉΓòÉΓòÉ 10.30. An Inline Function is As Fast As a Macro ΓòÉΓòÉΓòÉ
  8284.  
  8285. By declaring a function inline, you can direct GNU CC to integrate that 
  8286. function's code into the code for its callers.  This makes execution faster by 
  8287. eliminating the function-call overhead; in addition, if any of the actual 
  8288. argument values are constant, their known values may permit simplifications at 
  8289. compile time so that not all of the inline function's code needs to be 
  8290. included.  The effect on code size is less predictable; object code may be 
  8291. larger or smaller with function inlining, depending on the particular case. 
  8292. Inlining of functions is an optimization and it really ``works'' only in 
  8293. optimizing compilation.  If you don't use `-O', no function is really inline. 
  8294.  
  8295. To declare a function inline, use the inline keyword in its declaration, like 
  8296. this: 
  8297.  
  8298. inline int
  8299. inc (int *a)
  8300. {
  8301.   (*a)++;
  8302. }
  8303.  
  8304. (If you are writing a header file to be included in ANSI C programs, write 
  8305. __inline__ instead of inline.  See Alternate Keywords.) 
  8306.  
  8307. You can also make all ``simple enough'' functions inline with the option 
  8308. `-finline-functions'.  Note that certain usages in a function definition can 
  8309. make it unsuitable for inline substitution. 
  8310.  
  8311. Note that in C and Objective C, unlike C++, the inline keyword does not affect 
  8312. the linkage of the function. 
  8313.  
  8314. GNU CC automatically inlines member functions defined within the class body of 
  8315. C++ programs even if they are not explicitly declared inline.  (You can 
  8316. override this with `-fno-default-inline'; see Options Controlling C++ Dialect.) 
  8317.  
  8318. When a function is both inline and static, if all calls to the function are 
  8319. integrated into the caller, and the function's address is never used, then the 
  8320. function's own assembler code is never referenced. In this case, GNU CC does 
  8321. not actually output assembler code for the function, unless you specify the 
  8322. option `-fkeep-inline-functions'. Some calls cannot be integrated for various 
  8323. reasons (in particular, calls that precede the function's definition cannot be 
  8324. integrated, and neither can recursive calls within the definition).  If there 
  8325. is a nonintegrated call, then the function is compiled to assembler code as 
  8326. usual.  The function must also be compiled as usual if the program refers to 
  8327. its address, because that can't be inlined. 
  8328.  
  8329. When an inline function is not static, then the compiler must assume that there 
  8330. may be calls from other source files; since a global symbol can be defined only 
  8331. once in any program, the function must not be defined in the other source 
  8332. files, so the calls therein cannot be integrated. Therefore, a non-static 
  8333. inline function is always compiled on its own in the usual fashion. 
  8334.  
  8335. If you specify both inline and extern in the function definition, then the 
  8336. definition is used only for inlining.  In no case is the function compiled on 
  8337. its own, not even if you refer to its address explicitly.  Such an address 
  8338. becomes an external reference, as if you had only declared the function, and 
  8339. had not defined it. 
  8340.  
  8341. This combination of inline and extern has almost the effect of a macro.  The 
  8342. way to use it is to put a function definition in a header file with these 
  8343. keywords, and put another copy of the definition (lacking inline and extern) in 
  8344. a library file. The definition in the header file will cause most calls to the 
  8345. function to be inlined.  If any uses of the function remain, they will refer to 
  8346. the single copy in the library. 
  8347.  
  8348. GNU C does not inline any functions when not optimizing.  It is not clear 
  8349. whether it is better to inline or not, in this case, but we found that a 
  8350. correct implementation when not optimizing was difficult.  So we did the easy 
  8351. thing, and turned it off. 
  8352.  
  8353.  
  8354. ΓòÉΓòÉΓòÉ 10.31. Assembler Instructions with C Expression Operands ΓòÉΓòÉΓòÉ
  8355.  
  8356. In an assembler instruction using asm, you can now specify the operands of the 
  8357. instruction using C expressions.  This means no more guessing which registers 
  8358. or memory locations will contain the data you want to use. 
  8359.  
  8360. You must specify an assembler instruction template much like what appears in a 
  8361. machine description, plus an operand constraint string for each operand. 
  8362.  
  8363. For example, here is how to use the 68881's fsinx instruction: 
  8364.  
  8365. asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
  8366.  
  8367. Here angle is the C expression for the input operand while result is that of 
  8368. the output operand.  Each has `"f"' as its operand constraint, saying that a 
  8369. floating point register is required.  The `=' in `=f' indicates that the 
  8370. operand is an output; all output operands' constraints must use `='.  The 
  8371. constraints use the same language used in the machine description (see 
  8372. Constraints). 
  8373.  
  8374. Each operand is described by an operand-constraint string followed by the C 
  8375. expression in parentheses.  A colon separates the assembler template from the 
  8376. first output operand, and another separates the last output operand from the 
  8377. first input, if any.  Commas separate output operands and separate inputs.  The 
  8378. total number of operands is limited to ten or to the maximum number of operands 
  8379. in any instruction pattern in the machine description, whichever is greater. 
  8380.  
  8381. If there are no output operands, and there are input operands, then there must 
  8382. be two consecutive colons surrounding the place where the output operands would 
  8383. go. 
  8384.  
  8385. Output operand expressions must be lvalues; the compiler can check this. The 
  8386. input operands need not be lvalues.  The compiler cannot check whether the 
  8387. operands have data types that are reasonable for the instruction being 
  8388. executed.  It does not parse the assembler instruction template and does not 
  8389. know what it means, or whether it is valid assembler input.  The extended asm 
  8390. feature is most often used for machine instructions that the compiler itself 
  8391. does not know exist.  If the output expression cannot be directly addressed 
  8392. (for example, it is a bit field), your constraint must allow a register.  In 
  8393. that case, GNU CC will use the register as the output of the asm, and then 
  8394. store that register into the output. 
  8395.  
  8396. The output operands must be write-only; GNU CC will assume that the values in 
  8397. these operands before the instruction are dead and need not be generated. 
  8398. Extended asm does not support input-output or read-write operands.  For this 
  8399. reason, the constraint character `+', which indicates such an operand, may not 
  8400. be used. 
  8401.  
  8402. When the assembler instruction has a read-write operand, or an operand in which 
  8403. only some of the bits are to be changed, you must logically split its function 
  8404. into two separate operands, one input operand and one write-only output 
  8405. operand.  The connection between them is expressed by constraints which say 
  8406. they need to be in the same location when the instruction executes.  You can 
  8407. use the same C expression for both operands, or different expressions.  For 
  8408. example, here we write the (fictitious) `combine' instruction with bar as its 
  8409. read-only source operand and foo as its read-write destination: 
  8410.  
  8411. asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
  8412.  
  8413. The constraint `"0"' for operand 1 says that it must occupy the same location 
  8414. as operand 0.  A digit in constraint is allowed only in an input operand, and 
  8415. it must refer to an output operand. 
  8416.  
  8417. Only a digit in the constraint can guarantee that one operand will be in the 
  8418. same place as another.  The mere fact that foo is the value of both operands is 
  8419. not enough to guarantee that they will be in the same place in the generated 
  8420. assembler code.  The following would not work: 
  8421.  
  8422. asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
  8423.  
  8424. Various optimizations or reloading could cause operands 0 and 1 to be in 
  8425. different registers; GNU CC knows no reason not to do so.  For example, the 
  8426. compiler might find a copy of the value of foo in one register and use it for 
  8427. operand 1, but generate the output operand 0 in a different register (copying 
  8428. it afterward to foo's own address).  Of course, since the register for operand 
  8429. 1 is not even mentioned in the assembler code, the result will not work, but 
  8430. GNU CC can't tell that. 
  8431.  
  8432. Some instructions clobber specific hard registers.  To describe this, write a 
  8433. third colon after the input operands, followed by the names of the clobbered 
  8434. hard registers (given as strings).  Here is a realistic example for the Vax: 
  8435.  
  8436. asm volatile ("movc3 %0,%1,%2"
  8437.               : /* no outputs */
  8438.               : "g" (from), "g" (to), "g" (count)
  8439.               : "r0", "r1", "r2", "r3", "r4", "r5");
  8440.  
  8441. If you refer to a particular hardware register from the assembler code, then 
  8442. you will probably have to list the register after the third colon to tell the 
  8443. compiler that the register's value is modified.  In many assemblers, the 
  8444. register names begin with `%'; to produce one `%' in the assembler code, you 
  8445. must write `%%' in the input. 
  8446.  
  8447. If your assembler instruction can alter the condition code register, add `cc' 
  8448. to the list of clobbered registers.  GNU CC on some machines represents the 
  8449. condition codes as a specific hardware register; `cc' serves to name this 
  8450. register.  On other machines, the condition code is handled differently, and 
  8451. specifying `cc' has no effect.  But it is valid no matter what the machine. 
  8452.  
  8453. If your assembler instruction modifies memory in an unpredictable fashion, add 
  8454. `memory' to the list of clobbered registers. This will cause GNU CC to not keep 
  8455. memory values cached in registers across the assembler instruction. 
  8456.  
  8457. You can put multiple assembler instructions together in a single asm template, 
  8458. separated either with newlines (written as `\n') or with semicolons if the 
  8459. assembler allows such semicolons.  The GNU assembler allows semicolons and all 
  8460. Unix assemblers seem to do so.  The input operands are guaranteed not to use 
  8461. any of the clobbered registers, and neither will the output operands' 
  8462. addresses, so you can read and write the clobbered registers as many times as 
  8463. you like.  Here is an example of multiple instructions in a template; it 
  8464. assumes that the subroutine _foo accepts arguments in registers 9 and 10: 
  8465.  
  8466. asm ("movl %0,r9;movl %1,r10;call _foo"
  8467.      : /* no outputs */
  8468.      : "g" (from), "g" (to)
  8469.      : "r9", "r10");
  8470.  
  8471. Unless an output operand has the `&' constraint modifier, GNU CC may allocate 
  8472. it in the same register as an unrelated input operand, on the assumption that 
  8473. the inputs are consumed before the outputs are produced. This assumption may be 
  8474. false if the assembler code actually consists of more than one instruction.  In 
  8475. such a case, use `&' for each output operand that may not overlap an input. See 
  8476. Modifiers. 
  8477.  
  8478. If you want to test the condition code produced by an assembler instruction, 
  8479. you must include a branch and a label in the asm construct, as follows: 
  8480.  
  8481. asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
  8482.      : "g" (result)
  8483.      : "g" (input));
  8484.  
  8485. This assumes your assembler supports local labels, as the GNU assembler and 
  8486. most Unix assemblers do. 
  8487.  
  8488. Speaking of labels, jumps from one asm to another are not supported.  The 
  8489. compiler's optimizers do not know about these jumps, and therefore they cannot 
  8490. take account of them when deciding how to optimize. 
  8491.  
  8492. Usually the most convenient way to use these asm instructions is to encapsulate 
  8493. them in macros that look like functions.  For example, 
  8494.  
  8495. #define sin(x)       \
  8496. ({ double __value, __arg = (x);   \
  8497.    asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
  8498.    __value; })
  8499.  
  8500. Here the variable __arg is used to make sure that the instruction operates on a 
  8501. proper double value, and to accept only those arguments x which can convert 
  8502. automatically to a double. 
  8503.  
  8504. Another way to make sure the instruction operates on the correct data type is 
  8505. to use a cast in the asm.  This is different from using a variable __arg in 
  8506. that it converts more different types.  For example, if the desired type were 
  8507. int, casting the argument to int would accept a pointer with no complaint, 
  8508. while assigning the argument to an int variable named __arg would warn about 
  8509. using a pointer unless the caller explicitly casts it. 
  8510.  
  8511. If an asm has output operands, GNU CC assumes for optimization purposes that 
  8512. the instruction has no side effects except to change the output operands.  This 
  8513. does not mean that instructions with a side effect cannot be used, but you must 
  8514. be careful, because the compiler may eliminate them if the output operands 
  8515. aren't used, or move them out of loops, or replace two with one if they 
  8516. constitute a common subexpression.  Also, if your instruction does have a side 
  8517. effect on a variable that otherwise appears not to change, the old value of the 
  8518. variable may be reused later if it happens to be found in a register. 
  8519.  
  8520. You can prevent an asm instruction from being deleted, moved significantly, or 
  8521. combined, by writing the keyword volatile after the asm.  For example: 
  8522.  
  8523. #define set_priority(x)  \
  8524. asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
  8525.  
  8526. An instruction without output operands will not be deleted or moved 
  8527. significantly, regardless, unless it is unreachable. 
  8528.  
  8529. Note that even a volatile asm instruction can be moved in ways that appear 
  8530. insignificant to the compiler, such as across jump instructions.  You can't 
  8531. expect a sequence of volatile asm instructions to remain perfectly consecutive. 
  8532. If you want consecutive output, use a single asm. 
  8533.  
  8534. It is a natural idea to look for a way to give access to the condition code 
  8535. left by the assembler instruction.  However, when we attempted to implement 
  8536. this, we found no way to make it work reliably.  The problem is that output 
  8537. operands might need reloading, which would result in additional following 
  8538. ``store'' instructions.  On most machines, these instructions would alter the 
  8539. condition code before there was time to test it.  This problem doesn't arise 
  8540. for ordinary ``test'' and ``compare'' instructions because they don't have any 
  8541. output operands. 
  8542.  
  8543. If you are writing a header file that should be includable in ANSI C programs, 
  8544. write __asm__ instead of asm. See Alternate Keywords. 
  8545.  
  8546.  
  8547. ΓòÉΓòÉΓòÉ 10.32. Controlling Names Used in Assembler Code ΓòÉΓòÉΓòÉ
  8548.  
  8549. You can specify the name to be used in the assembler code for a C function or 
  8550. variable by writing the asm (or __asm__) keyword after the declarator as 
  8551. follows: 
  8552.  
  8553. int foo asm ("myfoo") = 2;
  8554.  
  8555. This specifies that the name to be used for the variable foo in the assembler 
  8556. code should be `myfoo' rather than the usual `_foo'. 
  8557.  
  8558. On systems where an underscore is normally prepended to the name of a C 
  8559. function or variable, this feature allows you to define names for the linker 
  8560. that do not start with an underscore. 
  8561.  
  8562. You cannot use asm in this way in a function definition; but you can get the 
  8563. same effect by writing a declaration for the function before its definition and 
  8564. putting asm there, like this: 
  8565.  
  8566. extern func () asm ("FUNC");
  8567.  
  8568. func (x, y)
  8569.      int x, y;
  8570. ...
  8571.  
  8572. It is up to you to make sure that the assembler names you choose do not 
  8573. conflict with any other assembler symbols.  Also, you must not use a register 
  8574. name; that would produce completely invalid assembler code.  GNU CC does not as 
  8575. yet have the ability to store static variables in registers. Perhaps that will 
  8576. be added. 
  8577.  
  8578.  
  8579. ΓòÉΓòÉΓòÉ 10.33. Variables in Specified Registers ΓòÉΓòÉΓòÉ
  8580.  
  8581. GNU C allows you to put a few global variables into specified hardware 
  8582. registers.  You can also specify the register in which an ordinary register 
  8583. variable should be allocated. 
  8584.  
  8585.      Global register variables reserve registers throughout the program. This 
  8586.       may be useful in programs such as programming language interpreters which 
  8587.       have a couple of global variables that are accessed very often. 
  8588.  
  8589.      Local register variables in specific registers do not reserve the 
  8590.       registers.  The compiler's data flow analysis is capable of determining 
  8591.       where the specified registers contain live values, and where they are 
  8592.       available for other uses. 
  8593.  
  8594.       These local variables are sometimes convenient for use with the extended 
  8595.       asm feature (see Extended Asm), if you want to write one output of the 
  8596.       assembler instruction directly into a particular register. (This will 
  8597.       work provided the register you specify fits the constraints specified for 
  8598.       that operand in the asm.) 
  8599.  
  8600.  Global Reg Vars 
  8601.  Local Reg Vars 
  8602.  
  8603.  
  8604. ΓòÉΓòÉΓòÉ 10.33.1. Defining Global Register Variables ΓòÉΓòÉΓòÉ
  8605.  
  8606. You can define a global register variable in GNU C like this: 
  8607.  
  8608. register int *foo asm ("a5");
  8609.  
  8610. Here a5 is the name of the register which should be used.  Choose a register 
  8611. which is normally saved and restored by function calls on your machine, so that 
  8612. library routines will not clobber it. 
  8613.  
  8614. Naturally the register name is cpu-dependent, so you would need to 
  8615. conditionalize your program according to cpu type.  The register a5 would be a 
  8616. good choice on a 68000 for a variable of pointer type.  On machines with 
  8617. register windows, be sure to choose a ``global'' register that is not affected 
  8618. magically by the function call mechanism. 
  8619.  
  8620. In addition, operating systems on one type of cpu may differ in how they name 
  8621. the registers; then you would need additional conditionals.  For example, some 
  8622. 68000 operating systems call this register %a5. 
  8623.  
  8624. Eventually there may be a way of asking the compiler to choose a register 
  8625. automatically, but first we need to figure out how it should choose and how to 
  8626. enable you to guide the choice.  No solution is evident. 
  8627.  
  8628. Defining a global register variable in a certain register reserves that 
  8629. register entirely for this use, at least within the current compilation. The 
  8630. register will not be allocated for any other purpose in the functions in the 
  8631. current compilation.  The register will not be saved and restored by these 
  8632. functions.  Stores into this register are never deleted even if they would 
  8633. appear to be dead, but references may be deleted or moved or simplified. 
  8634.  
  8635. It is not safe to access the global register variables from signal handlers, or 
  8636. from more than one thread of control, because the system library routines may 
  8637. temporarily use the register for other things (unless you recompile them 
  8638. specially for the task at hand). 
  8639.  
  8640. It is not safe for one function that uses a global register variable to call 
  8641. another such function foo by way of a third function lose that was compiled 
  8642. without knowledge of this variable (i.e. in a different source file in which 
  8643. the variable wasn't declared).  This is because lose might save the register 
  8644. and put some other value there. For example, you can't expect a global register 
  8645. variable to be available in the comparison-function that you pass to qsort, 
  8646. since qsort might have put something else in that register.  (If you are 
  8647. prepared to recompile qsort with the same global register variable, you can 
  8648. solve this problem.) 
  8649.  
  8650. If you want to recompile qsort or other source files which do not actually use 
  8651. your global register variable, so that they will not use that register for any 
  8652. other purpose, then it suffices to specify the compiler option `-ffixed-reg'. 
  8653. You need not actually add a global register declaration to their source code. 
  8654.  
  8655. A function which can alter the value of a global register variable cannot 
  8656. safely be called from a function compiled without this variable, because it 
  8657. could clobber the value the caller expects to find there on return. Therefore, 
  8658. the function which is the entry point into the part of the program that uses 
  8659. the global register variable must explicitly save and restore the value which 
  8660. belongs to its caller. 
  8661.  
  8662. On most machines, longjmp will restore to each global register variable the 
  8663. value it had at the time of the setjmp.  On some machines, however, longjmp 
  8664. will not change the value of global register variables.  To be portable, the 
  8665. function that called setjmp should make other arrangements to save the values 
  8666. of the global register variables, and to restore them in a longjmp.  This way, 
  8667. the same thing will happen regardless of what longjmp does. 
  8668.  
  8669. All global register variable declarations must precede all function 
  8670. definitions.  If such a declaration could appear after function definitions, 
  8671. the declaration would be too late to prevent the register from being used for 
  8672. other purposes in the preceding functions. 
  8673.  
  8674. Global register variables may not have initial values, because an executable 
  8675. file has no means to supply initial contents for a register. 
  8676.  
  8677. On the Sparc, there are reports that g3 ... g7 are suitable registers, but 
  8678. certain library functions, such as getwd, as well as the subroutines for 
  8679. division and remainder, modify g3 and g4.  g1 and g2 are local temporaries. 
  8680.  
  8681. On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of course, it 
  8682. will not do to use more than a few of those. 
  8683.  
  8684.  
  8685. ΓòÉΓòÉΓòÉ 10.33.2. Specifying Registers for Local Variables ΓòÉΓòÉΓòÉ
  8686.  
  8687. You can define a local register variable with a specified register like this: 
  8688.  
  8689. register int *foo asm ("a5");
  8690.  
  8691. Here a5 is the name of the register which should be used.  Note that this is 
  8692. the same syntax used for defining global register variables, but for a local 
  8693. variable it would appear within a function. 
  8694.  
  8695. Naturally the register name is cpu-dependent, but this is not a problem, since 
  8696. specific registers are most often useful with explicit assembler instructions 
  8697. (see Extended Asm).  Both of these things generally require that you 
  8698. conditionalize your program according to cpu type. 
  8699.  
  8700. In addition, operating systems on one type of cpu may differ in how they name 
  8701. the registers; then you would need additional conditionals.  For example, some 
  8702. 68000 operating systems call this register %a5. 
  8703.  
  8704. Eventually there may be a way of asking the compiler to choose a register 
  8705. automatically, but first we need to figure out how it should choose and how to 
  8706. enable you to guide the choice.  No solution is evident. 
  8707.  
  8708. Defining such a register variable does not reserve the register; it remains 
  8709. available for other uses in places where flow control determines the variable's 
  8710. value is not live.  However, these registers are made unavailable for use in 
  8711. the reload pass.  I would not be surprised if excessive use of this feature 
  8712. leaves the compiler too few available registers to compile certain functions. 
  8713.  
  8714.  
  8715. ΓòÉΓòÉΓòÉ 10.34. Alternate Keywords ΓòÉΓòÉΓòÉ
  8716.  
  8717. The option `-traditional' disables certain keywords; `-ansi' disables certain 
  8718. others.  This causes trouble when you want to use GNU C extensions, or ANSI C 
  8719. features, in a general-purpose header file that should be usable by all 
  8720. programs, including ANSI C programs and traditional ones.  The keywords asm, 
  8721. typeof and inline cannot be used since they won't work in a program compiled 
  8722. with `-ansi', while the keywords const, volatile, signed, typeof and inline 
  8723. won't work in a program compiled with `-traditional'. 
  8724.  
  8725. The way to solve these problems is to put `__' at the beginning and end of each 
  8726. problematical keyword.  For example, use __asm__ instead of asm, __const__ 
  8727. instead of const, and __inline__ instead of inline. 
  8728.  
  8729. Other C compilers won't accept these alternative keywords; if you want to 
  8730. compile with another compiler, you can define the alternate keywords as macros 
  8731. to replace them with the customary keywords.  It looks like this: 
  8732.  
  8733. #ifndef __GNUC__
  8734. #define __asm__ asm
  8735. #endif
  8736.  
  8737. `-pedantic' causes warnings for many GNU C extensions.  You can prevent such 
  8738. warnings within one expression by writing __extension__ before the expression. 
  8739. __extension__ has no effect aside from this. 
  8740.  
  8741.  
  8742. ΓòÉΓòÉΓòÉ 10.35. Incomplete enum Types ΓòÉΓòÉΓòÉ
  8743.  
  8744. You can define an enum tag without specifying its possible values. This results 
  8745. in an incomplete type, much like what you get if you write struct foo without 
  8746. describing the elements.  A later declaration which does specify the possible 
  8747. values completes the type. 
  8748.  
  8749. You can't allocate variables or storage using the type while it is incomplete. 
  8750. However, you can work with pointers to that type. 
  8751.  
  8752. This extension may not be very useful, but it makes the handling of enum more 
  8753. consistent with the way struct and union are handled. 
  8754.  
  8755. This extension is not supported by GNU C++. 
  8756.  
  8757.  
  8758. ΓòÉΓòÉΓòÉ 10.36. Function Names as Strings ΓòÉΓòÉΓòÉ
  8759.  
  8760. GNU CC predefines two string variables to be the name of the current function. 
  8761. The variable __FUNCTION__ is the name of the function as it appears in the 
  8762. source.  The variable __PRETTY_FUNCTION__ is the name of the function pretty 
  8763. printed in a language specific fashion. 
  8764.  
  8765. These names are always the same in a C function, but in a C++ function they may 
  8766. be different.  For example, this program: 
  8767.  
  8768. extern "C" {
  8769. extern int printf (char *, ...);
  8770. }
  8771.  
  8772. class a {
  8773.  public:
  8774.   sub (int i)
  8775.     {
  8776.       printf ("__FUNCTION__ = %s\n", __FUNCTION__);
  8777.       printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
  8778.     }
  8779. };
  8780.  
  8781. int
  8782. main (void)
  8783. {
  8784.   a ax;
  8785.   ax.sub (0);
  8786.   return 0;
  8787. }
  8788.  
  8789. gives this output: 
  8790.  
  8791. __FUNCTION__ = sub
  8792. __PRETTY_FUNCTION__ = int  a::sub (int)
  8793.  
  8794. These names are not macros: they are predefined string variables. For example, 
  8795. `#ifdef __FUNCTION__' does not have any special meaning inside a function, 
  8796. since the preprocessor does not do anything special with the identifier 
  8797. __FUNCTION__. 
  8798.  
  8799.  
  8800. ΓòÉΓòÉΓòÉ 10.37. Bounds Checking ΓòÉΓòÉΓòÉ
  8801.  
  8802. The C part of the GNU compiler now supports full fine-grained pointer checking 
  8803. at runtime. This work was originally done by Richard W.M. Jones 
  8804. <rwmj@doc.ic.ac.uk>, and has been extended by the work of many other kind 
  8805. contributors.(3) 
  8806.  
  8807. The runtime checking library, test kit and various tools can be found in the 
  8808. `bounds/' subdirectory. 
  8809.  
  8810. The brief manual here is a distillation of the original paper that appeared at 
  8811. the same time as the original patches to GCC. The paper contains more details 
  8812. about the inner workings of bounds checking GCC. The paper can be found in 
  8813. PostScript format in `bounds/report/bcrep2.ps.gz'. 
  8814.  
  8815.  Compiling with checks                   How to compile your programs with 
  8816.                                          bounds checks on at runtime. 
  8817.  Incompatibilities with checking         You can't use setjmp/longjmp, and 
  8818.                                          threads and signal handlers need 
  8819.                                          special attention. 
  8820.  Unchecked code and libraries            You can freely mix unchecked source 
  8821.                                          files and libraries with your checked 
  8822.                                          program. 
  8823.  Debugging with GDB                      You may debug bounds checked programs 
  8824.                                          with GDB and there are special 
  8825.                                          breakpoints for this purpose. 
  8826.  Environment at runtime                  Customizing the runtime environment by 
  8827.                                          passing options in GCC_BOUNDS_OPTS. 
  8828.  Managing the heap                       How bounds checking uses the heap at 
  8829.                                          runtime. 
  8830.  Unchecked objects                       How unchecked objects work. 
  8831.  Miscellaneous features                  Other features that might be of 
  8832.                                          interest. 
  8833.  Checking 2D array indices               Notes about 2D array indices. 
  8834.  What errors are caught                  What errors are caught and what errors 
  8835.                                          are missed? 
  8836.  Performance                             How fast (or slow) can you expect 
  8837.                                          bounds checked programs to go? 
  8838.  Stubborn bugs                           Special ``features'' you may need to 
  8839.                                          know about. 
  8840.  Using G77 with bounds checking          A small patch you have to make to get 
  8841.                                          a smooth compile with G77. 
  8842.  
  8843.  
  8844. ΓòÉΓòÉΓòÉ 10.37.1. Compiling with checks ΓòÉΓòÉΓòÉ
  8845.  
  8846. To compile all or part of your program with bounds checking, simply add the 
  8847. -fbounds-checking flag when compiling and linking. In the simplest instance, 
  8848. you might do: 
  8849.  
  8850. gcc -fbounds-checking program.c -o program
  8851.  
  8852. Or, linking several checked files together: 
  8853.  
  8854. gcc -fbounds-checking -c file1.c -o file1.o
  8855. gcc -fbounds-checking -c file2.c -o file2.o
  8856. gcc -fbounds-checking -c file3.c -o file3.o
  8857. gcc -fbounds-checking file1.o file2.o file3.o -o program
  8858.  
  8859. If your program uses a Makefile, you will probably only need to add the 
  8860. -fbounds-checking flag to CFLAGS, and remake the program from scratch. 
  8861.  
  8862.  
  8863. ΓòÉΓòÉΓòÉ 10.37.2. Incompatibilities with checking ΓòÉΓòÉΓòÉ
  8864.  
  8865.      Programs that use setjmp and longjmp. 
  8866.  
  8867.       Bounds checking is unfortunately incompatible with setjmp/longjmp. This 
  8868.       is regrettable, but the problem is quite fundamental and it is unlikely 
  8869.       that these functions will ever be permissable. 
  8870.  
  8871.      Using signal handlers. 
  8872.  
  8873.       If possible, move signal handlers to a separate source file and set 
  8874.       checking off in that file. If this is not possible, then you will need to 
  8875.       edit `bounds/lib/mutex.h' which provides mutual exclusion to vital 
  8876.       internal structures in the checking library. Normally this mutual 
  8877.       exclusion is turned off, for reasons of efficiency. 
  8878.  
  8879.      Using threads. 
  8880.  
  8881.       You may use threads with bounds checking. If more than one thread could 
  8882.       ever run with bounds checking, you will need to provide mutual exclusion 
  8883.       as with signal handlers above. Edit the file `bounds/lib/mutex.h' and add 
  8884.       whatever code is necessary to give mutual exclusion. 
  8885.  
  8886.      Checking C++ programs. 
  8887.  
  8888.       Every so often, someone mails me to ask why their C++ program isn't 
  8889.       checked when they do g++ -fbounds-checking. At the moment, the bounds 
  8890.       checking changes are specific to the C front end, so you can't use them 
  8891.       with the other GCC front ends (eg. C++, FORTRAN, Modula-2). There is no 
  8892.       reason why bounds checking couldn't be added to the C++ front end. It 
  8893.       would take perhaps one or two months to do. It is highly unlikely that I 
  8894.       will ever do this, but if a keen beta-tester wants it enough, I may be 
  8895.       willing to help them. In the meantime, it is possible to translate C++ 
  8896.       programs to C and check them, but line number and other debugging 
  8897.       information may get scrambled in the process. 
  8898.  
  8899.  
  8900. ΓòÉΓòÉΓòÉ 10.37.3. Unchecked code and libraries ΓòÉΓòÉΓòÉ
  8901.  
  8902. You can normally freely mix unchecked and checked code. This is why you don't 
  8903. need to make any changes to your C or X11 libraries when you install GCC with 
  8904. bounds checking. The checking library will detect code compiled with and 
  8905. without checking automagically, and let the two run together. You can mix 
  8906. unchecked object files with checked ones for the same reason. Always pass the 
  8907. -fbounds-checking flag to the link stage. 
  8908.  
  8909. gcc -fbounds-checking -c file1.c -o file1.o
  8910. gcc -c unchecked.c -o unchecked.o
  8911. gcc -fbounds-checking file1.o unchecked.o -o program
  8912.  
  8913. The checking library will usually only know about variables that are declared 
  8914. in checked code, and about memory allocated with malloc. So if a variable is 
  8915. declared in `unchecked.c' above, then references to it will not be checked, 
  8916. even when these references occur in checked code. 
  8917.  
  8918. Say that file `unchecked.c' contains the following code: 
  8919.  
  8920. int a[10];
  8921.  
  8922. int *get_ptr_to_a () { return a; }
  8923.  
  8924. and file `file1.c' contains: 
  8925.  
  8926. extern int *get_ptr_to_a ();
  8927.  
  8928. main ()
  8929. {
  8930.   int *ptr_to_a = get_ptr_to_a ();
  8931.   int i;
  8932.  
  8933.   for (i = 0; i < 20; ++i) ptr_to_a[i] = 0;
  8934. }
  8935.  
  8936. The references to ptr_to_a will not be checked. You can resolve this by adding 
  8937. a, either by hand, or semi-automatically. See Unchecked objects 
  8938.  
  8939. If you place extern int a[10]; anywhere in `file1.c', bounds checking GCC will 
  8940. also be able to find and check the array references properly. 
  8941.  
  8942. If you include `bounds/run-includes/unchecked.h', you get facilities to turn 
  8943. bounds checking on and off over short stretches of code and within single 
  8944. expressions and statements. Even when bounds checking is switched off, you may 
  8945. still use these features. The macros are silently ignored if bounds checking is 
  8946. off, or if the compiler is not GCC. 
  8947.  
  8948.      BOUNDS_CHECKING_OFF ... BOUNDS_CHECKING_ON 
  8949.  
  8950.       Turn off bounds checking over a section of code. For instance: 
  8951.  
  8952.             /* This code is checked ... */
  8953.             BOUNDS_CHECKING_OFF;
  8954.             /* This code is unchecked ... */
  8955.             BOUNDS_CHECKING_ON;
  8956.             /* This code is checked again ... */
  8957.  
  8958.       The unchecked code should not try to return from a function, or jump over 
  8959.       the BOUNDS_CHECKING_ON statement with goto, else checking will be 
  8960.       switched off for the rest of the program! 
  8961.  
  8962.      BOUNDS_CHECKING_OFF_DURING 
  8963.  
  8964.       Switch off checking in a single statement. For instance: 
  8965.  
  8966.             BOUNDS_CHECKING_OFF_DURING (p += 5);
  8967.  
  8968.       The statement should not (obviously) be goto, return, ... 
  8969.  
  8970.      BOUNDS_CHECKING_OFF_IN_EXPR 
  8971.  
  8972.       Switch off checking while a single expression is being evaluated. For 
  8973.       instance: 
  8974.  
  8975.             p = BOUNDS_CHECKING_OFF_IN_EXPR (a + 5);
  8976.  
  8977.  
  8978. ΓòÉΓòÉΓòÉ 10.37.4. Debugging with GDB ΓòÉΓòÉΓòÉ
  8979.  
  8980. If you have GDB (or another debugger) on your system, you will be able to debug 
  8981. bounds checked programs easily and efficiently. To help you catch bounds errors 
  8982. before the program aborts (which sometimes causes the program's stack to 
  8983. disappear), place a breakpoint at __bounds_breakpoint. The checking library 
  8984. always calls this breakpoint before aborting. If the -never-fatal flag has been 
  8985. supplied See Environment at runtime, you will need to place this breakpoint, 
  8986. since the program does not abort when it hits a bounds error. 
  8987.  
  8988.  
  8989. ΓòÉΓòÉΓòÉ 10.37.5. Environment at runtime ΓòÉΓòÉΓòÉ
  8990.  
  8991. You can customize the way a bounds-checked program runs by passing options to 
  8992. it in the environment variable `GCC_BOUNDS_OPTS'. For instance, suppose you 
  8993. don't want the banner message that appears when bounds checked programs start 
  8994. up. With sh or ksh, you might type: 
  8995.  
  8996. % GCC_BOUNDS_OPTS='-no-message' program
  8997.  
  8998. With csh: 
  8999.  
  9000. % setenv GCC_BOUNDS_OPTS '-no-message'; program
  9001.  
  9002. You can put any combination of the following flags in GCC_BOUNDS_OPTS. Place 
  9003. spaces or tabs between each flag. 
  9004.  
  9005.  `-no-message' 
  9006.            Don't print the introductory message. 
  9007.  
  9008.  `-no-statistics' 
  9009.            Don't print library call statistics with the program quits. 
  9010.  
  9011.  `-?, -help' 
  9012.            Print this list of options, then quit the program before it starts. 
  9013.  
  9014.  `-reuse-heap (*)' 
  9015.  
  9016.  `-reuse-age=<age>' 
  9017.  
  9018.  `-no-reuse-heap' 
  9019.            See the discussion of heap memory, See Managing the heap. 
  9020.  
  9021.  `-warn-unchecked-statics' 
  9022.  
  9023.  `-no-warn-unchecked-statics (*)' 
  9024.  
  9025.  `-warn-unchecked-stack' 
  9026.  
  9027.  `-no-warn-unchecked-stack (*)' 
  9028.            See the discussion of unchecked objects, See Unchecked objects. 
  9029.  
  9030.  `-warn-free-null (*)' 
  9031.  
  9032.  `-no-warn-free-null' 
  9033.            Give a warning if free (0) is called. Note that this may be correct 
  9034.            in ANSI C, and some libraries, notably X11, do it quite often. 
  9035.  
  9036.  `-warn-misc-strings (*)' 
  9037.  
  9038.  `-no-warn-misc-strings' 
  9039.            Miscellaneous warnings with str* and mem* functions, such as trying 
  9040.            to call memcpy with size = 0. 
  9041.  
  9042.  `-warn-illegal' 
  9043.  
  9044.  `-no-warn-illegal (*)' 
  9045.            Warn when ILLEGAL pointers are generated. These patches, provided by 
  9046.            Don Lewis <gdonl@gv.ssi1.com>, help to track down ILLEGAL pointer 
  9047.            errors when they happen. 
  9048.  
  9049.  `-warn-unaligned (*)' 
  9050.  
  9051.  `-no-warn-unaligned' 
  9052.            Warn when a pointer is used in an unaligned manner, for instance 
  9053.            reading integer data as chars. This warning is turned on by default, 
  9054.            but may be disabled, since some programs do this quite harmlessly. 
  9055.            These patches were suggested by Stuart Kemp and Eberhard Mattes. 
  9056.  
  9057.  `-warn-all' 
  9058.            Turn on all of the warnings above. 
  9059.  
  9060.  `-array-index-check' 
  9061.  
  9062.  `-no-array-index-check (*)' 
  9063.            Check 2D array indices correctly. This is turned off by default, 
  9064.            since it causes incompatibilities with perfectly correct programs. 
  9065.            See Checking 2D array indices 
  9066.  
  9067.  `-never-fatal' 
  9068.            Normally the library will call abort() after it detects the first 
  9069.            bounds error. If this flag is given, the library attempts to 
  9070.            proceed. The first error may generate more errors itself afterwards, 
  9071.            so only the first error is guaranteed to be correct. 
  9072.  
  9073.  `-print-calls' 
  9074.  
  9075.  `-no-print-calls (*)' 
  9076.            Print calls to the checking library. This option is only useful if 
  9077.            you want to debug bounds checking GCC itself. 
  9078.  
  9079.  Items marked with a `(*)' are the default. 
  9080.  
  9081.  
  9082. ΓòÉΓòÉΓòÉ 10.37.6. Managing the heap ΓòÉΓòÉΓòÉ
  9083.  
  9084. The bounds checking library includes a customized version of the GNU malloc 
  9085. library. Calls to malloc, free, realloc, calloc, cfree, valloc and memalign are 
  9086. checked. You will get a bounds error if you try to: 
  9087.  
  9088.      Free a pointer that has not been allocated in the proper way, or free a 
  9089.       pointer twice. 
  9090.  
  9091.      Reallocate a pointer that has not been allocated, or has been freed. 
  9092.  
  9093.      Use a pointer to freed memory, or to memory that has been moved by 
  9094.       realloc. 
  9095.  
  9096.      Free or reallocate static memory. 
  9097.  
  9098.  Bounds checking GCC does not attempt to detect memory leaks, nor is it capable 
  9099.  of garbage collection. 
  9100.  
  9101.  There are several strategies for tracking stale memory pointers. Ideally, we 
  9102.  would like to never reuse VM after the programmer has freed it, so that we 
  9103.  will always be able to detect a stale pointer, no matter how long the program 
  9104.  runs before using it. If you wish this behaviour, then pass the -no-reuse-heap 
  9105.  option in `GCC_BOUNDS_OPTS' See Environment at runtime.(4) 
  9106.  
  9107.  In practice, we found this technique to be wasteful, so the default is to 
  9108.  reuse heap memory immediately. However, in order to provide some protection 
  9109.  against stale pointers, you may pass the -reuse-age=<age> option to the 
  9110.  library. This will add freed blocks to a queue of pending blocks. You must 
  9111.  call free <age> times before the block is actually reused. 
  9112.  
  9113.  Notice that the most common error is: 
  9114.  
  9115.   free_list (list *p)
  9116.   {
  9117.     for (; p != NULL; p = p->next)
  9118.       free (p);
  9119.   }
  9120.  
  9121.  The default flags, -reuse-heap -reuse-age=0, will catch this error. 
  9122.  
  9123.  
  9124. ΓòÉΓòÉΓòÉ 10.37.7. Unchecked objects ΓòÉΓòÉΓòÉ
  9125.  
  9126. Variables declared in files that are not compiled with -fbounds-checking are 
  9127. not normally known about by the checking library. Pointers that point to these 
  9128. variables are not checked, even where the operations on these pointers happen 
  9129. within checked code. To be sure that your program is running without any 
  9130. errors, you should turn on warnings about unchecked operations by giving the 
  9131. -warn-unchecked-statics and/or -warn-unchecked-stack flags at runtime. See 
  9132. Environment at runtime. 
  9133.  
  9134. To avoid these warnings, and check all operations, you should take steps to add 
  9135. these objects to the tree used by the checking library. There are three 
  9136. approaches: 
  9137.  
  9138.      Declare the object as extern somewhere in checked code. Make sure that 
  9139.       the size of the object appears in the expression, ie. extern int a[10];, 
  9140.       not extern int a[];. 
  9141.  
  9142.      Add the object by hand by calling __bounds_note_constructed_object. This 
  9143.       function is declared: 
  9144.  
  9145.             void __bounds_note_constructed_object (ptr, size, align, filename, line, name);
  9146.               void *ptr;      /* Pointer to the object. */
  9147.               size_t size;    /* Size of the object (bytes). */
  9148.               size_t align;   /* Pass 1 here. */
  9149.               char *filename; /* Filename where declared (for debugging). */
  9150.               int line;       /* Line number. */
  9151.               char *name;     /* Name of the object. */
  9152.  
  9153.      Add all the objects from a single object file, or a library 
  9154.       automagically, using the grab-statics tool in `bounds/tools'. There is a 
  9155.       README file in that directory that will tell you more. 
  9156.  
  9157.  
  9158. ΓòÉΓòÉΓòÉ 10.37.8. Miscellaneous features ΓòÉΓòÉΓòÉ
  9159.  
  9160.      Detecting when a source file is being compiled with bounds checking. 
  9161.  
  9162.       When GCC compiles a file with the -fbounds-checking flag, it defines 
  9163.       __BOUNDS_CHECKING_ON in the preprocessor. In addition, the variable 
  9164.       __bounds_checking_on is set to 1 when bounds checking is on in the 
  9165.       program as a whole, and set to 0 when it is not. The variable is actually 
  9166.       located in libgcc.a, so it is always present (unless you aren't using 
  9167.       GCC). 
  9168.  
  9169.       Notice the subtle difference between these two methods. Say a program 
  9170.       consists of source files `file1.c' and `file2.c'. If the program is 
  9171.       compiled with 
  9172.  
  9173.             gcc -fbounds-checking -c file1.c
  9174.             gcc -c file2.c
  9175.             gcc -fbounds-checking file1.o file2.o -o program
  9176.  
  9177.       then `file1.c' will be compiled with __BOUNDS_CHECKING_ON defined. In 
  9178.       `file2.c' this will not be defined. Both files will be able to declare 
  9179.       extern int __bounds_checking_on; and the variable will be read as 1 by 
  9180.       both. 
  9181.  
  9182.       If the same files are compiled without bounds checking, then 
  9183.       __BOUNDS_CHECKING_ON will not be defined. Both files will be able to 
  9184.       declare extern int __bounds_checking_on; and will read the variable as 0. 
  9185.  
  9186.       If the same files are compiled with another C compiler, then variable 
  9187.       __bounds_checking_on will not exist. So all references to this variable 
  9188.       should be defended by #ifdef __GNUC__ ... #endif. 
  9189.  
  9190.  
  9191. ΓòÉΓòÉΓòÉ 10.37.9. Checking 2D array indices ΓòÉΓòÉΓòÉ
  9192.  
  9193. 2D arrays (and, indeed, n-D arrays with n >= 2) are not checked as you might 
  9194. expect. We consider such arrays to be flattened before checking. For instance a 
  9195. mathematical 3x3-matrix A might be defined as: 
  9196.  
  9197. double A[3][3];
  9198.  
  9199. Bounds checking will normally consider this to be a flat array with 9 elements. 
  9200. So, it is perfectly sound to write A[1][4], since 1*3+4 == 7, and 0 <= 7 < 9. 
  9201. Similarly, A[0][8] and A[2][-1] will not generate bounds errors. 
  9202. (Interestingly, though, errors in the first index will be caught --- this is to 
  9203. do with a subtlety in the way bounds checking works). 
  9204.  
  9205. This is really down to the way that bounds checking works. Bounds checking 
  9206. loses a lot of information about the internal structure of objects, storing 
  9207. essentially just the start and size of the object. In future, we hope to store 
  9208. more information. In the example above, we would store the fact that A is a 3x3 
  9209. array of doubles. This will allow us to check indices correctly. 
  9210.  
  9211. In the meantime, Herman ten Brugge has written a partial solution for 2D 
  9212. arrays. It will flag errors like the examples I gave above. You can get this 
  9213. behaviour by supplying -array-index-check in GCC_BOUNDS_OPTS. 
  9214.  
  9215. Herman's fixes unfortunately break other correct C usage, in particular, the 
  9216. common form: 
  9217.  
  9218. struct _string_t
  9219. {
  9220.   int len;
  9221.   char str[1];
  9222. };
  9223.  
  9224. (where the structure is allocated with extra bytes for the string). Because 
  9225. this is quite common in C, I have turned Herman's patch off by default. 
  9226.  
  9227.  
  9228. ΓòÉΓòÉΓòÉ 10.37.10. What errors are caught ΓòÉΓòÉΓòÉ
  9229.  
  9230. A lot of people tell me that they have Purify, and bounds checking GCC seems 
  9231. unnecessary, since it seems to duplicate Purify but more slowly. Well, there 
  9232. are important reasons why bounds checking GCC is better than Purify, and if you 
  9233. rely on Purify alone, you will certainly miss bugs in your program. 
  9234.  
  9235. This is what bounds checking GCC will find, which Purify won't: 
  9236.  
  9237.      Bounds of stack and static variables 
  9238.  
  9239.       Try compiling: 
  9240.  
  9241.             main ()
  9242.             {
  9243.               int a[10], b[100], i;
  9244.  
  9245.               for (i = 0; i < 100; ++i)
  9246.                 a[i] = 0;
  9247.             }
  9248.  
  9249.       Purify will only detect these sorts of errors reliably if a is allocated 
  9250.       with malloc. 
  9251.  
  9252.      Large offsets from memory allocated with malloc 
  9253.  
  9254.       Bugs such as the following one will not be found reliably by Purify, 
  9255.       since it only puts a certain amount of blank padding between malloc'd 
  9256.       memory. 
  9257.  
  9258.             struct large_type {
  9259.               int data[5000];
  9260.             };
  9261.  
  9262.             main ()
  9263.             {
  9264.               char *m1;
  9265.               struct large_type *m2;
  9266.               int i;
  9267.  
  9268.               m1 = (char *) malloc (20000);
  9269.               m2 = (struct large_type *) malloc (sizeof (struct large_type) * 5);
  9270.  
  9271.               for (i = 4; i >= -2; --i) /* note: error when i == -1 */
  9272.                 m2[i].data[0] = 0;
  9273.             }
  9274.  
  9275.  This is what Purify will find, which bounds checking GCC won't: 
  9276.  
  9277.      Using a variable or memory before it is initialized 
  9278.  
  9279.       Bounds checking GCC can't currently check this, but it may well be added 
  9280.       in a future version. GCC itself will pick up simple instances of this if 
  9281.       you pass the -Winitialized flag (without -fbounds-checking), but cannot 
  9282.       check use of malloc'd memory. 
  9283.  
  9284.  There is a freeware program which emulates Purify available from Tristan 
  9285.  Gingold <gingold@amoco.saclay.cea.fr>. It only runs under Linux. Purify only 
  9286.  works on Sun SPARCstations and HP-PA machines, and, of course, costs lots of 
  9287.  cash. 
  9288.  
  9289.  
  9290. ΓòÉΓòÉΓòÉ 10.37.11. Performance ΓòÉΓòÉΓòÉ
  9291.  
  9292. This page is under construction. 
  9293.  
  9294.  
  9295. ΓòÉΓòÉΓòÉ 10.37.12. Stubborn bugs ΓòÉΓòÉΓòÉ
  9296.  
  9297. The very latest list of bugs can be found in `bounds/BUGS'. This is a list of 
  9298. some of the most stubborn bugs, some of which have been around since the first 
  9299. version. Please send bug reports and (even better) bug fixes to 
  9300. `rwmj@doc.ic.ac.uk'. Padding missed out between aggregates and 32-bit objects 
  9301. on the stack. 
  9302.  
  9303.      Bounds checking GCC usually inserts bytes of padding between adjacent 
  9304.       stack objects. This dead area between objects helps the checking library 
  9305.       to detect the difference between a pointer to the last byte + 1 of one 
  9306.       object and a pointer to the first byte of the next object. For some 
  9307.       reason, this padding is omitted occasionally when a 32-bit object (eg. 
  9308.       int, pointer) follows an aggregate (eg. array). But not always. 
  9309.  
  9310.       The bug used to happen under Linux, but at some point in the past it 
  9311.       seems to have fixed itself. The bug still appears under Solaris. You can 
  9312.       demonstrate the bug by compiling Tcl/Tk on Solaris. The checking library 
  9313.       will report at run time that a reference has been made to the byte 
  9314.       following the end of the first object. When you look at the code, you 
  9315.       will see that it is in fact referring to the next object (ie. the 32-bit 
  9316.       integer). 
  9317.  
  9318.       Update (16/10/95): I fixed some stuff in assign_stack_local and 
  9319.       assign_outer_stack_local (thanks to Don Lewis <gdonl@gv.ssi1.com>) but I 
  9320.       haven't been able to verify that this bug has gone for sure. 
  9321.  
  9322.  
  9323. ΓòÉΓòÉΓòÉ 10.37.13. Using G77 with bounds checking ΓòÉΓòÉΓòÉ
  9324.  
  9325. Bounds checking patches break the current G77 patches. You can get round this 
  9326. very easily. Copy cp/bounds.c into the f/ subdirectory. Alter f/Makefile.in so 
  9327. that it compiles bounds.c along with the other G77 object files. 
  9328.  
  9329. Notice that this doesn't add bounds checking to FORTRAN (:-<). Just lets you 
  9330. compile it. 
  9331.  
  9332.  
  9333. ΓòÉΓòÉΓòÉ 11. Extensions to the C++ Language ΓòÉΓòÉΓòÉ
  9334.  
  9335. The GNU compiler provides these extensions to the C++ language (and you can 
  9336. also use most of the C language extensions in your C++ programs).  If you want 
  9337. to write code that checks whether these features are available, you can test 
  9338. for the GNU compiler the same way as for C programs: check for a predefined 
  9339. macro __GNUC__.  You can also use __GNUG__ to test specifically for GNU C++ ( 
  9340. see Standard Predefined Macros). 
  9341.  
  9342.  Naming Results                          Giving a name to C++ function return 
  9343.                                          values. 
  9344.  Min and Max                             C++ Minimum and maximum operators. 
  9345.  Destructors and Goto                    Goto is safe to use in C++ even when 
  9346.                                          destructors are needed. 
  9347.  C++ Interface                           You can use a single C++ header file 
  9348.                                          for both 
  9349.               declarations and definitions. 
  9350.  
  9351.  Template Instantiation                  Methods for ensuring that exactly one 
  9352.                                          copy of 
  9353.               each needed template instantiation is emitted. 
  9354.  
  9355.  C++ Signatures                          You can specify abstract types to get 
  9356.                                          subtype 
  9357.      a     a     a polymorphism independent from inheritance. 
  9358.  
  9359.  
  9360. ΓòÉΓòÉΓòÉ 11.1. Named Return Values in C++ ΓòÉΓòÉΓòÉ
  9361.  
  9362. GNU C++ extends the function-definition syntax to allow you to specify a name 
  9363. for the result of a function outside the body of the definition, in C++ 
  9364. programs: 
  9365.  
  9366. type
  9367. functionname (args) return resultname;
  9368. {
  9369.   ...
  9370.   body
  9371.   ...
  9372. }
  9373.  
  9374. You can use this feature to avoid an extra constructor call when a function 
  9375. result has a class type.  For example, consider a function m, declared as `X v 
  9376. = m ();', whose result is of class X: 
  9377.  
  9378. X
  9379. m ()
  9380. {
  9381.   X b;
  9382.   b.a = 23;
  9383.   return b;
  9384. }
  9385.  
  9386. Although m appears to have no arguments, in fact it has one implicit argument: 
  9387. the address of the return value.  At invocation, the address of enough space to 
  9388. hold v is sent in as the implicit argument. Then b is constructed and its a 
  9389. field is set to the value 23.  Finally, a copy constructor (a constructor of 
  9390. the form `X(X&)') is applied to b, with the (implicit) return value location as 
  9391. the target, so that v is now bound to the return value. 
  9392.  
  9393. But this is wasteful.  The local b is declared just to hold something that will 
  9394. be copied right out.  While a compiler that combined an ``elision'' algorithm 
  9395. with interprocedural data flow analysis could conceivably eliminate all of 
  9396. this, it is much more practical to allow you to assist the compiler in 
  9397. generating efficient code by manipulating the return value explicitly, thus 
  9398. avoiding the local variable and copy constructor altogether. 
  9399.  
  9400. Using the extended GNU C++ function-definition syntax, you can avoid the 
  9401. temporary allocation and copying by naming r as your return value at the 
  9402. outset, and assigning to its a field directly: 
  9403.  
  9404. X
  9405. m () return r;
  9406. {
  9407.   r.a = 23;
  9408. }
  9409.  
  9410. The declaration of r is a standard, proper declaration, whose effects are 
  9411. executed *before* any of the body of m. 
  9412.  
  9413. Functions of this type impose no additional restrictions; in particular, you 
  9414. can execute return statements, or return implicitly by reaching the end of the 
  9415. function body (``falling off the edge''). Cases like 
  9416.  
  9417. X
  9418. m () return r (23);
  9419. {
  9420.   return;
  9421. }
  9422.  
  9423. (or even `X m () return r (23); { }') are unambiguous, since the return value r 
  9424. has been initialized in either case.  The following code may be hard to read, 
  9425. but also works predictably: 
  9426.  
  9427. X
  9428. m () return r;
  9429. {
  9430.   X b;
  9431.   return b;
  9432. }
  9433.  
  9434. The return value slot denoted by r is initialized at the outset, but the 
  9435. statement `return b;' overrides this value.  The compiler deals with this by 
  9436. destroying r (calling the destructor if there is one, or doing nothing if there 
  9437. is not), and then reinitializing r with b. 
  9438.  
  9439. This extension is provided primarily to help people who use overloaded 
  9440. operators, where there is a great need to control not just the arguments, but 
  9441. the return values of functions.  For classes where the copy constructor incurs 
  9442. a heavy performance penalty (especially in the common case where there is a 
  9443. quick default constructor), this is a major savings.  The disadvantage of this 
  9444. extension is that you do not control when the default constructor for the 
  9445. return value is called: it is always called at the beginning. 
  9446.  
  9447.  
  9448. ΓòÉΓòÉΓòÉ 11.2. Minimum and Maximum Operators in C++ ΓòÉΓòÉΓòÉ
  9449.  
  9450. It is very convenient to have operators which return the ``minimum'' or the 
  9451. ``maximum'' of two arguments.  In GNU C++ (but not in GNU C), 
  9452.  
  9453.  a <? b 
  9454.            is the minimum, returning the smaller of the numeric values a and b; 
  9455.  
  9456.  a >? b 
  9457.            is the maximum, returning the larger of the numeric values a and b. 
  9458.  
  9459.  These operations are not primitive in ordinary C++, since you can use a macro 
  9460.  to return the minimum of two things in C++, as in the following example. 
  9461.  
  9462.   #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
  9463.  
  9464.  You might then use `int min = MIN (i, j);' to set min to the minimum value of 
  9465.  variables i and j. 
  9466.  
  9467.  However, side effects in X or Y may cause unintended behavior.  For example, 
  9468.  MIN (i++, j++) will fail, incrementing the smaller counter twice.  A GNU C 
  9469.  extension allows you to write safe macros that avoid this kind of problem ( 
  9470.  see Naming an Expression_s Type).  However, writing MIN and MAX as macros also 
  9471.  forces you to use function-call notation notation for a fundamental arithmetic 
  9472.  operation.  Using GNU C++ extensions, you can write `int min = i <? j;' 
  9473.  instead. 
  9474.  
  9475.  Since <? and >? are built into the compiler, they properly handle expressions 
  9476.  with side-effects;  `int min = i++ <? j++;' works correctly. 
  9477.  
  9478.  
  9479. ΓòÉΓòÉΓòÉ 11.3. goto and Destructors in GNU C++ ΓòÉΓòÉΓòÉ
  9480.  
  9481. In C++ programs, you can safely use the goto statement.  When you use it to 
  9482. exit a block which contains aggregates requiring destructors, the destructors 
  9483. will run before the goto transfers control.  (In ANSI C++, goto is restricted 
  9484. to targets within the current block.) 
  9485.  
  9486. The compiler still forbids using goto to enter a scope that requires 
  9487. constructors. 
  9488.  
  9489.  
  9490. ΓòÉΓòÉΓòÉ 11.4. Declarations and Definitions in One Header ΓòÉΓòÉΓòÉ
  9491.  
  9492. C++ object definitions can be quite complex.  In principle, your source code 
  9493. will need two kinds of things for each object that you use across more than one 
  9494. source file.  First, you need an interface specification, describing its 
  9495. structure with type declarations and function prototypes.  Second, you need the 
  9496. implementation itself. It can be tedious to maintain a separate interface 
  9497. description in a header file, in parallel to the actual implementation.  It is 
  9498. also dangerous, since separate interface and implementation definitions may not 
  9499. remain parallel. 
  9500.  
  9501. With GNU C++, you can use a single header file for both purposes. 
  9502.  
  9503. Warning: The mechanism to specify this is in transition.  For the nonce, you 
  9504. must use one of two #pragma commands; in a future release of GNU C++, an 
  9505. alternative mechanism will make these #pragma commands unnecessary. 
  9506.  
  9507. The header file contains the full definitions, but is marked with `#pragma 
  9508. interface' in the source code.  This allows the compiler to use the header file 
  9509. only as an interface specification when ordinary source files incorporate it 
  9510. with #include.  In the single source file where the full implementation 
  9511. belongs, you can use either a naming convention or `#pragma implementation' to 
  9512. indicate this alternate use of the header file. 
  9513.  
  9514.  #pragma interface 
  9515.  #pragma interface "subdir/objects.h" 
  9516.            Use this directive in header files that define object classes, to 
  9517.            save space in most of the object files that use those classes. 
  9518.            Normally, local copies of certain information (backup copies of 
  9519.            inline member functions, debugging information, and the internal 
  9520.            tables that implement virtual functions) must be kept in each object 
  9521.            file that includes class definitions.  You can use this pragma to 
  9522.            avoid such duplication.  When a header file containing `#pragma 
  9523.            interface' is included in a compilation, this auxiliary information 
  9524.            will not be generated (unless the main input source file itself uses 
  9525.            `#pragma implementation'). Instead, the object files will contain 
  9526.            references to be resolved at link time. 
  9527.  
  9528.            The second form of this directive is useful for the case where you 
  9529.            have multiple headers with the same name in different directories. 
  9530.            If you use this form, you must specify the same string to `#pragma 
  9531.            implementation'. 
  9532.  
  9533.  #pragma implementation 
  9534.  #pragma implementation "objects.h" 
  9535.            Use this pragma in a main input file, when you want full output from 
  9536.            included header files to be generated (and made globally visible). 
  9537.            The included header file, in turn, should use `#pragma interface'. 
  9538.            Backup copies of inline member functions, debugging information, and 
  9539.            the internal tables used to implement virtual functions are all 
  9540.            generated in implementation files. 
  9541.  
  9542.            If you use `#pragma implementation' with no argument, it applies to 
  9543.            an include file with the same basename(5) as your source file.  For 
  9544.            example, in `allclass.cc', `#pragma implementation' by itself is 
  9545.            equivalent to `#pragma implementation "allclass.h"'. 
  9546.  
  9547.            In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as an 
  9548.            implementation file whenever you would include it from `allclass.cc' 
  9549.            even if you never specified `#pragma implementation'.  This was 
  9550.            deemed to be more trouble than it was worth, however, and disabled. 
  9551.  
  9552.            If you use an explicit `#pragma implementation', it must appear in 
  9553.            your source file before you include the affected header files. 
  9554.  
  9555.            Use the string argument if you want a single implementation file to 
  9556.            include code from multiple header files.  (You must also use 
  9557.            `#include' to include the header file; `#pragma implementation' only 
  9558.            specifies how to use the file---it doesn't actually include it.) 
  9559.  
  9560.            There is no way to split up the contents of a single header file 
  9561.            into multiple implementation files. 
  9562.  
  9563.  `#pragma implementation' and `#pragma interface' also have an effect on 
  9564.  function inlining. 
  9565.  
  9566.  If you define a class in a header file marked with `#pragma interface', the 
  9567.  effect on a function defined in that class is similar to an explicit extern 
  9568.  declaration---the compiler emits no code at all to define an independent 
  9569.  version of the function.  Its definition is used only for inlining with its 
  9570.  callers. 
  9571.  
  9572.  Conversely, when you include the same header file in a main source file that 
  9573.  declares it as `#pragma implementation', the compiler emits code for the 
  9574.  function itself; this defines a version of the function that can be found via 
  9575.  pointers (or by callers compiled without inlining).  If all calls to the 
  9576.  function can be inlined, you can avoid emitting the function by compiling with 
  9577.  `-fno-implement-inlines'. If any calls were not inlined, you will get linker 
  9578.  errors. 
  9579.  
  9580.  
  9581. ΓòÉΓòÉΓòÉ 11.5. Where's the Template? ΓòÉΓòÉΓòÉ
  9582.  
  9583. C++ templates are the first language feature to require more intelligence from 
  9584. the environment than one usually finds on a UNIX system.  Somehow the compiler 
  9585. and linker have to make sure that each template instance occurs exactly once in 
  9586. the executable if it is needed, and not at all otherwise.  There are two basic 
  9587. approaches to this problem, which I will refer to as the Borland model and the 
  9588. Cfront model. 
  9589.  
  9590.  Borland model 
  9591.            Borland C++ solved the template instantiation problem by adding the 
  9592.            code equivalent of common blocks to their linker; template instances 
  9593.            are emitted in each translation unit that uses them, and they are 
  9594.            collapsed together at run time.  The advantage of this model is that 
  9595.            the linker only has to consider the object files themselves; there 
  9596.            is no external complexity to worry about.  This disadvantage is that 
  9597.            compilation time is increased because the template code is being 
  9598.            compiled repeatedly.  Code written for this model tends to include 
  9599.            definitions of all member templates in the header file, since they 
  9600.            must be seen to be compiled. 
  9601.  
  9602.  Cfront model 
  9603.            The AT&T C++ translator, Cfront, solved the template instantiation 
  9604.            problem by creating the notion of a template repository, an 
  9605.            automatically maintained place where template instances are stored. 
  9606.            As individual object files are built, notes are placed in the 
  9607.            repository to record where templates and potential type arguments 
  9608.            were seen so that the subsequent instantiation step knows where to 
  9609.            find them.  At link time, any needed instances are generated and 
  9610.            linked in.  The advantages of this model are more optimal 
  9611.            compilation speed and the ability to use the system linker; to 
  9612.            implement the Borland model a compiler vendor also needs to replace 
  9613.            the linker.  The disadvantages are vastly increased complexity, and 
  9614.            thus potential for error; theoretically, this should be just as 
  9615.            transparent, but in practice it has been very difficult to build 
  9616.            multiple programs in one directory and one program in multiple 
  9617.            directories using Cfront.  Code written for this model tends to 
  9618.            separate definitions of non-inline member templates into a separate 
  9619.            file, which is magically found by the link preprocessor when a 
  9620.            template needs to be instantiated. 
  9621.  
  9622.  Currently, g++ implements neither automatic model.  In the mean time, you have 
  9623.  three options for dealing with template instantiations: 
  9624.  
  9625.    1. Do nothing.  Pretend g++ does implement automatic instantiation 
  9626.       management.  Code written for the Borland model will work fine, but each 
  9627.       translation unit will contain instances of each of the templates it uses. 
  9628.       In a large program, this can lead to an unacceptable amount of code 
  9629.       duplication. 
  9630.  
  9631.    2. Add `#pragma interface' to all files containing template definitions. 
  9632.       For each of these files, add `#pragma implementation "filename"' to the 
  9633.       top of some `.C' file which `#include's it.  Then compile everything with 
  9634.       -fexternal-templates. The templates will then only be expanded in the 
  9635.       translation unit which implements them ( i.e. has a `#pragma 
  9636.       implementation' line for the file where they live); all other files will 
  9637.       use external references.  If you're lucky, everything should work 
  9638.       properly.  If you get undefined symbol errors, you need to make sure that 
  9639.       each template instance which is used in the program is used in the file 
  9640.       which implements that template.  If you don't have any use for a 
  9641.       particular instance in that file, you can just instantiate it explicitly, 
  9642.       using the syntax from the latest C++ working paper: 
  9643.  
  9644.             template class A<int>;
  9645.             template ostream& operator << (ostream&, const A<int>&);
  9646.  
  9647.       This strategy will work with code written for either model.  If you are 
  9648.       using code written for the Cfront model, the file containing a class 
  9649.       template and the file containing its member templates should be 
  9650.       implemented in the same translation unit. 
  9651.  
  9652.       A slight variation on this approach is to use the flag 
  9653.       -falt-external-templates instead; this flag causes template instances to 
  9654.       be emitted in the translation unit that implements the header where they 
  9655.       are first instantiated, rather than the one which implements the file 
  9656.       where the templates are defined.  This header must be the same in all 
  9657.       translation units, or things are likely to break. 
  9658.  
  9659.       See Declarations and Definitions in One Header, for more discussion of 
  9660.       these pragmas. 
  9661.  
  9662.    3. Explicitly instantiate all the template instances you use, and compile 
  9663.       with -fno-implicit-templates.  This is probably your best bet; it may 
  9664.       require more knowledge of exactly which templates you are using, but it's 
  9665.       less mysterious than the previous approach, and it doesn't require any 
  9666.       `#pragma's or other g++-specific code.  You can scatter the 
  9667.       instantiations throughout your program, you can create one big file to do 
  9668.       all the instantiations, or you can create tiny files like 
  9669.  
  9670.             #include "Foo.h"
  9671.             #include "Foo.cc"
  9672.  
  9673.             template class Foo<int>;
  9674.  
  9675.       for each instance you need, and create a template instantiation library 
  9676.       from those.  I'm partial to the last, but your mileage may vary.  If you 
  9677.       are using Cfront-model code, you can probably get away with not using 
  9678.       -fno-implicit-templates when compiling files that don't `#include' the 
  9679.       member template definitions. 
  9680.  
  9681.  
  9682. ΓòÉΓòÉΓòÉ 11.6. Type Abstraction using Signatures ΓòÉΓòÉΓòÉ
  9683.  
  9684. In GNU C++, you can use the keyword signature to define a completely abstract 
  9685. class interface as a datatype.  You can connect this abstraction with actual 
  9686. classes using signature pointers.  If you want to use signatures, run the GNU 
  9687. compiler with the `-fhandle-signatures' command-line option.  (With this 
  9688. option, the compiler reserves a second keyword sigof as well, for a future 
  9689. extension.) 
  9690.  
  9691. Roughly, signatures are type abstractions or interfaces of classes. Some other 
  9692. languages have similar facilities.  C++ signatures are related to ML's 
  9693. signatures, Haskell's type classes, definition modules in Modula-2, interface 
  9694. modules in Modula-3, abstract types in Emerald, type modules in Trellis/Owl, 
  9695. categories in Scratchpad II, and types in POOL-I.  For a more detailed 
  9696. discussion of signatures, see Signatures: A Language Extension for Improving 
  9697. Type Abstraction and Subtype Polymorphism in C++ by Gerald Baumgartner and 
  9698. Vincent F. Russo (Tech report CSD--TR--95--051, Dept. of Computer Sciences, 
  9699. Purdue University, August 1995, a slightly improved version appeared in 
  9700. Software---Practice & Experience, 25(8), pp. 863--889, August 1995).  You can 
  9701. get the tech report by anonymous FTP from ftp.cs.purdue.edu in 
  9702. `pub/gb/Signature-design.ps.gz'. 
  9703.  
  9704. Syntactically, a signature declaration is a collection of member function 
  9705. declarations and nested type declarations. For example, this signature 
  9706. declaration defines a new abstract type S with member functions `int foo ()' 
  9707. and `int bar (int)': 
  9708.  
  9709. signature S
  9710. {
  9711.   int foo ();
  9712.   int bar (int);
  9713. };
  9714.  
  9715. Since signature types do not include implementation definitions, you cannot 
  9716. write an instance of a signature directly.  Instead, you can define a pointer 
  9717. to any class that contains the required interfaces as a signature pointer. 
  9718. Such a class implements the signature type. 
  9719.  
  9720. To use a class as an implementation of S, you must ensure that the class has 
  9721. public member functions `int foo ()' and `int bar (int)'.  The class can have 
  9722. other member functions as well, public or not; as long as it offers what's 
  9723. declared in the signature, it is suitable as an implementation of that 
  9724. signature type. 
  9725.  
  9726. For example, suppose that C is a class that meets the requirements of signature 
  9727. S (C conforms to S).  Then 
  9728.  
  9729. C obj;
  9730. S * p = &obj;
  9731.  
  9732. defines a signature pointer p and initializes it to point to an object of type 
  9733. C. The member function call `int i = p->foo ();' executes `obj.foo ()'. 
  9734.  
  9735. Abstract virtual classes provide somewhat similar facilities in standard C++. 
  9736. There are two main advantages to using signatures instead: 
  9737.  
  9738.    1. Subtyping becomes independent from inheritance.  A class or signature 
  9739.       type T is a subtype of a signature type S independent of any inheritance 
  9740.       hierarchy as long as all the member functions declared in S are also 
  9741.       found in T.  So you can define a subtype hierarchy that is completely 
  9742.       independent from any inheritance (implementation) hierarchy, instead of 
  9743.       being forced to use types that mirror the class inheritance hierarchy. 
  9744.  
  9745.    2. Signatures allow you to work with existing class hierarchies as 
  9746.       implementations of a signature type.  If those class hierarchies are only 
  9747.       available in compiled form, you're out of luck with abstract virtual 
  9748.       classes, since an abstract virtual class cannot be retrofitted on top of 
  9749.       existing class hierarchies.  So you would be required to write interface 
  9750.       classes as subtypes of the abstract virtual class. 
  9751.  
  9752.  There is one more detail about signatures.  A signature declaration can 
  9753.  contain member function definitions as well as member function declarations. 
  9754.  A signature member function with a full definition is called a default 
  9755.  implementation; classes need not contain that particular interface in order to 
  9756.  conform.  For example, a class C can conform to the signature 
  9757.  
  9758.   signature T
  9759.   {
  9760.     int f (int);
  9761.     int f0 () { return f (0); };
  9762.   };
  9763.  
  9764.  whether or not C implements the member function `int f0 ()'. If you define 
  9765.  C::f0, that definition takes precedence; otherwise, the default implementation 
  9766.  S::f0 applies. 
  9767.  
  9768.  
  9769. ΓòÉΓòÉΓòÉ 12. Known Causes of Trouble with GNU CC ΓòÉΓòÉΓòÉ
  9770.  
  9771. This section describes known problems that affect users of GNU CC.  Most of 
  9772. these are not GNU CC bugs per se---if they were, we would fix them. But the 
  9773. result for a user may be like the result of a bug. 
  9774.  
  9775. Some of these problems are due to bugs in other software, some are missing 
  9776. features that are too much work to add, and some are places where people's 
  9777. opinions differ as to what is best. 
  9778.  
  9779.  Actual Bugs                             Bugs we will fix later. 
  9780.  Installation Problems                   Problems that manifest when you 
  9781.                                          install GNU CC. 
  9782.  Cross-Compiler Problems                 Common problems of cross compiling 
  9783.                                          with GNU CC. 
  9784.  Interoperation                          Problems using GNU CC with other 
  9785.                                          compilers, and with certain linkers, 
  9786.                                          assemblers and debuggers. 
  9787.  External Bugs                           Problems compiling certain programs. 
  9788.  Incompatibilities                       GNU CC is incompatible with 
  9789.                                          traditional C. 
  9790.  Fixed Headers                           GNU C uses corrected versions of 
  9791.                                          system header files. This is 
  9792.                                          necessary, but doesn't always work 
  9793.                                          smoothly. 
  9794.  Standard Libraries                      GNU C uses the system C library, which 
  9795.                                          might not be compliant with the 
  9796.                                          ISO/ANSI C standard. 
  9797.  Disappointments                         Regrettable things we can't change, 
  9798.                                          but not quite bugs. 
  9799.  C++ Misunderstandings                   Common misunderstandings with GNU C++. 
  9800.  Protoize Caveats                        Things to watch out for when using 
  9801.                                          protoize. 
  9802.  Non-bugs                                Things we think are right, but some 
  9803.                                          others disagree. 
  9804.  Warnings and Errors                     Which problems in your code get 
  9805.                                          warnings, 
  9806.               and which get errors. 
  9807.  
  9808.  
  9809. ΓòÉΓòÉΓòÉ 12.1. Actual Bugs We Haven't Fixed Yet ΓòÉΓòÉΓòÉ
  9810.  
  9811.      The fixincludes script interacts badly with automounters; if the 
  9812.       directory of system header files is automounted, it tends to be unmounted 
  9813.       while fixincludes is running.  This would seem to be a bug in the 
  9814.       automounter.  We don't know any good way to work around it. 
  9815.  
  9816.      The fixproto script will sometimes add prototypes for the sigsetjmp and 
  9817.       siglongjmp functions that reference the jmp_buf type before that type is 
  9818.       defined.  To work around this, edit the offending file and place the 
  9819.       typedef in front of the prototypes. 
  9820.  
  9821.      There are several obscure case of mis-using struct, union, and enum tags 
  9822.       that are not detected as errors by the compiler. 
  9823.  
  9824.      When `-pedantic-errors' is specified, GNU C will incorrectly give an 
  9825.       error message when a function name is specified in an expression 
  9826.       involving the comma operator. 
  9827.  
  9828.      Loop unrolling doesn't work properly for certain C++ programs.  This is a 
  9829.       bug in the C++ front end.  It sometimes emits incorrect debug info, and 
  9830.       the loop unrolling code is unable to recover from this error. 
  9831.  
  9832.  
  9833. ΓòÉΓòÉΓòÉ 12.2. Installation Problems ΓòÉΓòÉΓòÉ
  9834.  
  9835. This is a list of problems (and some apparent problems which don't really mean 
  9836. anything is wrong) that show up during installation of GNU CC. 
  9837.  
  9838.      On certain systems, defining certain environment variables such as CC can 
  9839.       interfere with the functioning of make. 
  9840.  
  9841.      If you encounter seemingly strange errors when trying to build the 
  9842.       compiler in a directory other than the source directory, it could be 
  9843.       because you have previously configured the compiler in the source 
  9844.       directory.  Make sure you have done all the necessary preparations. See 
  9845.       Other Dir. 
  9846.  
  9847.      If you build GNU CC on a BSD system using a directory stored in a System 
  9848.       V file system, problems may occur in running fixincludes if the System V 
  9849.       file system doesn't support symbolic links.  These problems result in a 
  9850.       failure to fix the declaration of size_t in `sys/types.h'.  If you find 
  9851.       that size_t is a signed type and that type mismatches occur, this could 
  9852.       be the cause. 
  9853.  
  9854.       The solution is not to use such a directory for building GNU CC. 
  9855.  
  9856.      In previous versions of GNU CC, the gcc driver program looked for as and 
  9857.       ld in various places; for example, in files beginning with 
  9858.       `/usr/local/lib/gcc-'.  GNU CC version 2 looks for them in the directory 
  9859.       `/usr/local/lib/gcc-lib/target/version'. 
  9860.  
  9861.       Thus, to use a version of as or ld that is not the system default, for 
  9862.       example gas or GNU ld, you must put them in that directory (or make links 
  9863.       to them from that directory). 
  9864.  
  9865.      Some commands executed when making the compiler may fail (return a 
  9866.       non-zero status) and be ignored by make.  These failures, which are often 
  9867.       due to files that were not found, are expected, and can safely be 
  9868.       ignored. 
  9869.  
  9870.      It is normal to have warnings in compiling certain files about 
  9871.       unreachable code and about enumeration type clashes.  These files' names 
  9872.       begin with `insn-'.  Also, `real.c' may get some warnings that you can 
  9873.       ignore. 
  9874.  
  9875.      Sometimes make recompiles parts of the compiler when installing the 
  9876.       compiler.  In one case, this was traced down to a bug in make.  Either 
  9877.       ignore the problem or switch to GNU Make. 
  9878.  
  9879.      If you have installed a program known as purify, you may find that it 
  9880.       causes errors while linking enquire, which is part of building GNU CC. 
  9881.       The fix is to get rid of the file real-ld which purify installs---so that 
  9882.       GNU CC won't try to use it. 
  9883.  
  9884.      On SLS 1.01, a Linux-based GNU system, there is a problem with `libc.a': 
  9885.       it does not contain the obstack functions.  However, GNU CC assumes that 
  9886.       the obstack functions are in `libc.a' when it is the GNU C library.  To 
  9887.       work around this problem, change the __GNU_LIBRARY__ conditional around 
  9888.       line 31 to `#if 1'. 
  9889.  
  9890.      On some 386 systems, building the compiler never finishes because enquire 
  9891.       hangs due to a hardware problem in the motherboard---it reports floating 
  9892.       point exceptions to the kernel incorrectly.  You can install GNU CC 
  9893.       except for `float.h' by patching out the command to run enquire.  You may 
  9894.       also be able to fix the problem for real by getting a replacement 
  9895.       motherboard.  This problem was observed in Revision E of the Micronics 
  9896.       motherboard, and is fixed in Revision F. It has also been observed in the 
  9897.       MYLEX MXA-33 motherboard. 
  9898.  
  9899.       If you encounter this problem, you may also want to consider removing the 
  9900.       FPU from the socket during the compilation.  Alternatively, if you are 
  9901.       running SCO Unix, you can reboot and force the FPU to be ignored. To do 
  9902.       this, type `hd(40)unix auto ignorefpu'. 
  9903.  
  9904.      On some 386 systems, GNU CC crashes trying to compile `enquire.c'. This 
  9905.       happens on machines that don't have a 387 FPU chip.  On 386 machines, the 
  9906.       system kernel is supposed to emulate the 387 when you don't have one. 
  9907.       The crash is due to a bug in the emulator. 
  9908.  
  9909.       One of these systems is the Unix from Interactive Systems: 386/ix. On 
  9910.       this system, an alternate emulator is provided, and it does work. To use 
  9911.       it, execute this command as super-user: 
  9912.  
  9913.             ln /etc/emulator.rel1 /etc/emulator
  9914.  
  9915.       and then reboot the system.  (The default emulator file remains present 
  9916.       under the name `emulator.dflt'.) 
  9917.  
  9918.       Try using `/etc/emulator.att', if you have such a problem on the SCO 
  9919.       system. 
  9920.  
  9921.       Another system which has this problem is Esix.  We don't know whether it 
  9922.       has an alternate emulator that works. 
  9923.  
  9924.       On NetBSD 0.8, a similar problem manifests itself as these error 
  9925.       messages: 
  9926.  
  9927.             enquire.c: In function `fprop':
  9928.             enquire.c:2328: floating overflow
  9929.  
  9930.      On SCO systems, when compiling GNU CC with the system's compiler, do not 
  9931.       use `-O'.  Some versions of the system's compiler miscompile GNU CC with 
  9932.       `-O'. 
  9933.  
  9934.      Sometimes on a Sun 4 you may observe a crash in the program genflags or 
  9935.       genoutput while building GNU CC.  This is said to be due to a bug in sh. 
  9936.       You can probably get around it by running genflags or genoutput manually 
  9937.       and then retrying the make. 
  9938.  
  9939.      On Solaris 2, executables of GNU CC version 2.0.2 are commonly available, 
  9940.       but they have a bug that shows up when compiling current versions of GNU 
  9941.       CC: undefined symbol errors occur during assembly if you use `-g'. 
  9942.  
  9943.       The solution is to compile the current version of GNU CC without `-g'. 
  9944.       That makes a working compiler which you can use to recompile with `-g'. 
  9945.  
  9946.      Solaris 2 comes with a number of optional OS packages.  Some of these 
  9947.       packages are needed to use GNU CC fully.  If you did not install all 
  9948.       optional packages when installing Solaris, you will need to verify that 
  9949.       the packages that GNU CC needs are installed. 
  9950.  
  9951.       To check whether an optional package is installed, use the pkginfo 
  9952.       command.  To add an optional package, use the pkgadd command.  For 
  9953.       further details, see the Solaris documentation. 
  9954.  
  9955.       For Solaris 2.0 and 2.1, GNU CC needs six packages: `SUNWarc', 
  9956.       `SUNWbtool', ` SUNWesu', `SUNWhea', `SUNWlibm', and `SUNWtoo'. 
  9957.  
  9958.       For Solaris 2.2, GNU CC needs an additional seventh package: `SUNWsprot'. 
  9959.  
  9960.      On Solaris 2, trying to use the linker and other tools in `/usr/ucb' to 
  9961.       install GNU CC has been observed to cause trouble. For example, the 
  9962.       linker may hang indefinitely.  The fix is to remove `/usr/ucb' from your 
  9963.       PATH. 
  9964.  
  9965.      If you use the 1.31 version of the MIPS assembler (such as was shipped 
  9966.       with Ultrix 3.1), you will need to use the -fno-delayed-branch switch 
  9967.       when optimizing floating point code.  Otherwise, the assembler will 
  9968.       complain when the GCC compiler fills a branch delay slot with a floating 
  9969.       point instruction, such as add.d. 
  9970.  
  9971.      If on a MIPS system you get an error message saying ``does not have gp 
  9972.       sections for all it's [sic] sectons [sic]'', don't worry about it.  This 
  9973.       happens whenever you use GAS with the MIPS linker, but there is not 
  9974.       really anything wrong, and it is okay to use the output file.  You can 
  9975.       stop such warnings by installing the GNU linker. 
  9976.  
  9977.       It would be nice to extend GAS to produce the gp tables, but they are 
  9978.       optional, and there should not be a warning about their absence. 
  9979.  
  9980.      In Ultrix 4.0 on the MIPS machine, `stdio.h' does not work with GNU CC at 
  9981.       all unless it has been fixed with fixincludes.  This causes problems in 
  9982.       building GNU CC.  Once GNU CC is installed, the problems go away. 
  9983.  
  9984.       To work around this problem, when making the stage 1 compiler, specify 
  9985.       this option to Make: 
  9986.  
  9987.             GCC_FOR_TARGET="./xgcc -B./ -I./include"
  9988.  
  9989.       When making stage 2 and stage 3, specify this option: 
  9990.  
  9991.             CFLAGS="-g -I./include"
  9992.  
  9993.      Users have reported some problems with version 2.0 of the MIPS compiler 
  9994.       tools that were shipped with Ultrix 4.1.  Version 2.10 which came with 
  9995.       Ultrix 4.2 seems to work fine. 
  9996.  
  9997.       Users have also reported some problems with version 2.20 of the MIPS 
  9998.       compiler tools that were shipped with RISC/os 4.x.  The earlier version 
  9999.       2.11 seems to work fine. 
  10000.  
  10001.      Some versions of the MIPS linker will issue an assertion failure when 
  10002.       linking code that uses alloca against shared libraries on RISC-OS 5.0, 
  10003.       and DEC's OSF/1 systems.  This is a bug in the linker, that is supposed 
  10004.       to be fixed in future revisions. To protect against this, GNU CC passes 
  10005.       `-non_shared' to the linker unless you pass an explicit `-shared' or 
  10006.       `-call_shared' switch. 
  10007.  
  10008.      On System V release 3, you may get this error message while linking: 
  10009.  
  10010.             ld fatal: failed to write symbol name something
  10011.              in strings table for file whatever
  10012.  
  10013.       This probably indicates that the disk is full or your ULIMIT won't allow 
  10014.       the file to be as large as it needs to be. 
  10015.  
  10016.       This problem can also result because the kernel parameter MAXUMEM is too 
  10017.       small.  If so, you must regenerate the kernel and make the value much 
  10018.       larger.  The default value is reported to be 1024; a value of 32768 is 
  10019.       said to work.  Smaller values may also work. 
  10020.  
  10021.      On System V, if you get an error like this, 
  10022.  
  10023.             /usr/local/lib/bison.simple: In function `yyparse':
  10024.             /usr/local/lib/bison.simple:625: virtual memory exhausted
  10025.  
  10026.       that too indicates a problem with disk space, ULIMIT, or MAXUMEM. 
  10027.  
  10028.      Current GNU CC versions probably do not work on version 2 of the NeXT 
  10029.       operating system. 
  10030.  
  10031.      On NeXTStep 3.0, the Objective C compiler does not work, due, apparently, 
  10032.       to a kernel bug that it happens to trigger.  This problem does not happen 
  10033.       on 3.1. 
  10034.  
  10035.      On the Tower models 4n0 and 6n0, by default a process is not allowed to 
  10036.       have more than one megabyte of memory.  GNU CC cannot compile itself (or 
  10037.       many other programs) with `-O' in that much memory. 
  10038.  
  10039.       To solve this problem, reconfigure the kernel adding the following line 
  10040.       to the configuration file: 
  10041.  
  10042.             MAXUMEM = 4096
  10043.  
  10044.      On HP 9000 series 300 or 400 running HP-UX release 8.0, there is a bug in 
  10045.       the assembler that must be fixed before GNU CC can be built.  This bug 
  10046.       manifests itself during the first stage of compilation, while building 
  10047.       `libgcc2.a': 
  10048.  
  10049.             _floatdisf
  10050.             cc1: warning: `-g' option not supported on this version of GCC
  10051.             cc1: warning: `-g1' option not supported on this version of GCC
  10052.             ./xgcc: Internal compiler error: program as got fatal signal 11
  10053.  
  10054.       A patched version of the assembler is available by anonymous ftp from 
  10055.       altdorf.ai.mit.edu as the file `archive/cph/hpux-8.0-assembler'.  If you 
  10056.       have HP software support, the patch can also be obtained directly from 
  10057.       HP, as described in the following note: 
  10058.  
  10059.       This is the patched assembler, to patch SR#1653-010439, where the 
  10060.       assembler aborts on floating point constants. 
  10061.  
  10062.       The bug is not really in the assembler, but in the shared library version 
  10063.       of the function ``cvtnum(3c)''.  The bug on ``cvtnum(3c)'' is 
  10064.       SR#4701-078451.  Anyway, the attached assembler uses the archive library 
  10065.       version of ``cvtnum(3c)'' and thus does not exhibit the bug. 
  10066.  
  10067.       This patch is also known as PHCO_4484. 
  10068.  
  10069.      On HP-UX version 8.05, but not on 8.07 or more recent versions, the 
  10070.       fixproto shell script triggers a bug in the system shell. If you 
  10071.       encounter this problem, upgrade your operating system or use BASH (the 
  10072.       GNU shell) to run fixproto. 
  10073.  
  10074.      Some versions of the Pyramid C compiler are reported to be unable to 
  10075.       compile GNU CC.  You must use an older version of GNU CC for 
  10076.       bootstrapping.  One indication of this problem is if you get a crash when 
  10077.       GNU CC compiles the function muldi3 in file `libgcc2.c'. 
  10078.  
  10079.       You may be able to succeed by getting GNU CC version 1, installing it, 
  10080.       and using it to compile GNU CC version 2.  The bug in the Pyramid C 
  10081.       compiler does not seem to affect GNU CC version 1. 
  10082.  
  10083.      There may be similar problems on System V Release 3.1 on 386 systems. 
  10084.  
  10085.      On the Intel Paragon (an i860 machine), if you are using operating system 
  10086.       version 1.0, you will get warnings or errors about redefinition of va_arg 
  10087.       when you build GNU CC. 
  10088.  
  10089.       If this happens, then you need to link most programs with the library 
  10090.       `iclib.a'.  You must also modify `stdio.h' as follows: before the lines 
  10091.  
  10092.             #if     defined(__i860__) && !defined(_VA_LIST)
  10093.             #include <va_list.h>
  10094.  
  10095.       insert the line 
  10096.  
  10097.             #if __PGC__
  10098.  
  10099.       and after the lines 
  10100.  
  10101.             extern int  vprintf(const char *, va_list );
  10102.             extern int  vsprintf(char *, const char *, va_list );
  10103.             #endif
  10104.  
  10105.       insert the line 
  10106.  
  10107.             #endif /* __PGC__ */
  10108.  
  10109.       These problems don't exist in operating system version 1.1. 
  10110.  
  10111.      On the Altos 3068, programs compiled with GNU CC won't work unless you 
  10112.       fix a kernel bug.  This happens using system versions V.2.2 1.0gT1 and 
  10113.       V.2.2 1.0e and perhaps later versions as well.  See the file 
  10114.       `README.ALTOS'. 
  10115.  
  10116.      You will get several sorts of compilation and linking errors on the we32k 
  10117.       if you don't follow the special instructions.  See Configurations. 
  10118.  
  10119.      A bug in the HP-UX 8.05 (and earlier) shell will cause the fixproto 
  10120.       program to report an error of the form: 
  10121.  
  10122.             ./fixproto: sh internal 1K buffer overflow
  10123.  
  10124.       To fix this, change the first line of the fixproto script to look like: 
  10125.  
  10126.             #!/bin/ksh
  10127.  
  10128.  
  10129. ΓòÉΓòÉΓòÉ 12.3. Cross-Compiler Problems ΓòÉΓòÉΓòÉ
  10130.  
  10131. You may run into problems with cross compilation on certain machines, for 
  10132. several reasons. 
  10133.  
  10134.      Cross compilation can run into trouble for certain machines because some 
  10135.       target machines' assemblers require floating point numbers to be written 
  10136.       as integer constants in certain contexts. 
  10137.  
  10138.       The compiler writes these integer constants by examining the floating 
  10139.       point value as an integer and printing that integer, because this is 
  10140.       simple to write and independent of the details of the floating point 
  10141.       representation.  But this does not work if the compiler is running on a 
  10142.       different machine with an incompatible floating point format, or even a 
  10143.       different byte-ordering. 
  10144.  
  10145.       In addition, correct constant folding of floating point values requires 
  10146.       representing them in the target machine's format. (The C standard does 
  10147.       not quite require this, but in practice it is the only way to win.) 
  10148.  
  10149.       It is now possible to overcome these problems by defining macros such as 
  10150.       REAL_VALUE_TYPE.  But doing so is a substantial amount of work for each 
  10151.       target machine. See Cross-compilation. 
  10152.  
  10153.      At present, the program `mips-tfile' which adds debug support to object 
  10154.       files on MIPS systems does not work in a cross compile environment. 
  10155.  
  10156.  
  10157. ΓòÉΓòÉΓòÉ 12.4. Interoperation ΓòÉΓòÉΓòÉ
  10158.  
  10159. This section lists various difficulties encountered in using GNU C or GNU C++ 
  10160. together with other compilers or with the assemblers, linkers, libraries and 
  10161. debuggers on certain systems. 
  10162.  
  10163.      Objective C does not work on the RS/6000. 
  10164.  
  10165.      GNU C++ does not do name mangling in the same way as other C++ compilers. 
  10166.       This means that object files compiled with one compiler cannot be used 
  10167.       with another. 
  10168.  
  10169.       This effect is intentional, to protect you from more subtle problems. 
  10170.       Compilers differ as to many internal details of C++ implementation, 
  10171.       including: how class instances are laid out, how multiple inheritance is 
  10172.       implemented, and how virtual function calls are handled.  If the name 
  10173.       encoding were made the same, your programs would link against libraries 
  10174.       provided from other compilers---but the programs would then crash when 
  10175.       run.  Incompatible libraries are then detected at link time, rather than 
  10176.       at run time. 
  10177.  
  10178.      Older GDB versions sometimes fail to read the output of GNU CC version 2. 
  10179.       If you have trouble, get GDB version 4.4 or later. 
  10180.  
  10181.      DBX rejects some files produced by GNU CC, though it accepts similar 
  10182.       constructs in output from PCC.  Until someone can supply a coherent 
  10183.       description of what is valid DBX input and what is not, there is nothing 
  10184.       I can do about these problems.  You are on your own. 
  10185.  
  10186.      The GNU assembler (GAS) does not support PIC.  To generate PIC code, you 
  10187.       must use some other assembler, such as `/bin/as'. 
  10188.  
  10189.      On some BSD systems, including some versions of Ultrix, use of profiling 
  10190.       causes static variable destructors (currently used only in C++) not to be 
  10191.       run. 
  10192.  
  10193.      Use of `-I/usr/include' may cause trouble. 
  10194.  
  10195.       Many systems come with header files that won't work with GNU CC unless 
  10196.       corrected by fixincludes.  The corrected header files go in a new 
  10197.       directory; GNU CC searches this directory before `/usr/include'. If you 
  10198.       use `-I/usr/include', this tells GNU CC to search `/usr/include' earlier 
  10199.       on, before the corrected headers.  The result is that you get the 
  10200.       uncorrected header files. 
  10201.  
  10202.       Instead, you should use these options (when compiling C programs): 
  10203.  
  10204.             -I/usr/local/lib/gcc-lib/target/version/include -I/usr/include
  10205.  
  10206.       For C++ programs, GNU CC also uses a special directory that defines C++ 
  10207.       interfaces to standard C subroutines.  This directory is meant to be 
  10208.       searched before other standard include directories, so that it takes 
  10209.       precedence.  If you are compiling C++ programs and specifying include 
  10210.       directories explicitly, use this option first, then the two options 
  10211.       above: 
  10212.  
  10213.             -I/usr/local/lib/g++-include
  10214.       On some SGI systems, when you use `-lgl_s' as an option, 
  10215.  
  10216.      it gets translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 
  10217.       does not happen when you use GNU CC. You must specify all three options 
  10218.       explicitly. 
  10219.  
  10220.      On a Sparc, GNU CC aligns all values of type double on an 8-byte 
  10221.       boundary, and it expects every double to be so aligned.  The Sun compiler 
  10222.       usually gives double values 8-byte alignment, with one exception: 
  10223.       function arguments of type double may not be aligned. 
  10224.  
  10225.       As a result, if a function compiled with Sun CC takes the address of an 
  10226.       argument of type double and passes this pointer of type double * to a 
  10227.       function compiled with GNU CC, dereferencing the pointer may cause a 
  10228.       fatal signal. 
  10229.  
  10230.       One way to solve this problem is to compile your entire program with GNU 
  10231.       CC.  Another solution is to modify the function that is compiled with Sun 
  10232.       CC to copy the argument into a local variable; local variables are always 
  10233.       properly aligned.  A third solution is to modify the function that uses 
  10234.       the pointer to dereference it via the following function access_double 
  10235.       instead of directly with `*': 
  10236.  
  10237.             inline double
  10238.             access_double (double *unaligned_ptr)
  10239.             {
  10240.               union d2i { double d; int i[2]; };
  10241.  
  10242.               union d2i *p = (union d2i *) unaligned_ptr;
  10243.               union d2i u;
  10244.  
  10245.               u.i[0] = p->i[0];
  10246.               u.i[1] = p->i[1];
  10247.  
  10248.               return u.d;
  10249.             }
  10250.  
  10251.       Storing into the pointer can be done likewise with the same union. 
  10252.  
  10253.      On Solaris, the malloc function in the `libmalloc.a' library may allocate 
  10254.       memory that is only 4 byte aligned.  Since GNU CC on the Sparc assumes 
  10255.       that doubles are 8 byte aligned, this may result in a fatal signal if 
  10256.       doubles are stored in memory allocated by the `libmalloc.a' library. 
  10257.  
  10258.       The solution is to not use the `libmalloc.a' library.  Use instead malloc 
  10259.       and related functions from `libc.a'; they do not have this problem. 
  10260.  
  10261.      Sun forgot to include a static version of `libdl.a' with some versions of 
  10262.       SunOS (mainly 4.1).  This results in undefined symbols when linking 
  10263.       static binaries (that is, if you use `-static').  If you see undefined 
  10264.       symbols _dlclose, _dlsym or _dlopen when linking, compile and link 
  10265.       against the file `mit/util/misc/dlsym.c' from the MIT version of X 
  10266.       windows. 
  10267.  
  10268.      The 128-bit long double format that the Sparc port supports currently 
  10269.       works by using the architecturally defined quad-word floating point 
  10270.       instructions.  Since there is no hardware that supports these 
  10271.       instructions they must be emulated by the operating system.  Long doubles 
  10272.       do not work in Sun OS versions 4.0.3 and earlier, because the kernel 
  10273.       emulator uses an obsolete and incompatible format.  Long doubles do not 
  10274.       work in Sun OS version 4.1.1 due to a problem in a Sun library. Long 
  10275.       doubles do work on Sun OS versions 4.1.2 and higher, but GNU CC does not 
  10276.       enable them by default.  Long doubles appear to work in Sun OS 5.x 
  10277.       (Solaris 2.x). 
  10278.  
  10279.      On HP-UX version 9.01 on the HP PA, the HP compiler cc does not compile 
  10280.       GNU CC correctly.  We do not yet know why.  However, GNU CC compiled on 
  10281.       earlier HP-UX versions works properly on HP-UX 9.01 and can compile 
  10282.       itself properly on 9.01. 
  10283.  
  10284.      On the HP PA machine, ADB sometimes fails to work on functions compiled 
  10285.       with GNU CC.  Specifically, it fails to work on functions that use alloca 
  10286.       or variable-size arrays.  This is because GNU CC doesn't generate HP-UX 
  10287.       unwind descriptors for such functions.  It may even be impossible to 
  10288.       generate them. 
  10289.  
  10290.      Debugging (`-g') is not supported on the HP PA machine, unless you use 
  10291.       the preliminary GNU tools (see Installation). 
  10292.  
  10293.      Taking the address of a label may generate errors from the HP-UX PA 
  10294.       assembler.  GAS for the PA does not have this problem. 
  10295.  
  10296.      Using floating point parameters for indirect calls to static functions 
  10297.       will not work when using the HP assembler.  There simply is no way for 
  10298.       GCC to specify what registers hold arguments for static functions when 
  10299.       using the HP assembler.  GAS for the PA does not have this problem. 
  10300.  
  10301.      In extremely rare cases involving some very large functions you may 
  10302.       receive errors from the HP linker complaining about an out of bounds 
  10303.       unconditional branch offset.  This used to occur more often in previous 
  10304.       versions of GNU CC, but is now exceptionally rare.  If you should run 
  10305.       into it, you can work around by making your function smaller. 
  10306.  
  10307.      GNU CC compiled code sometimes emits warnings from the HP-UX assembler of 
  10308.       the form: 
  10309.  
  10310.             (warning) Use of GR3 when
  10311.               frame >= 8192 may cause conflict.
  10312.  
  10313.       These warnings are harmless and can be safely ignored. 
  10314.  
  10315.      The current version of the assembler (`/bin/as') for the RS/6000 has 
  10316.       certain problems that prevent the `-g' option in GCC from working.  Note 
  10317.       that `Makefile.in' uses `-g' by default when compiling `libgcc2.c'. 
  10318.  
  10319.       IBM has produced a fixed version of the assembler.  The upgraded 
  10320.       assembler unfortunately was not included in any of the AIX 3.2 update PTF 
  10321.       releases (3.2.2, 3.2.3, or 3.2.3e).  Users of AIX 3.1 should request PTF 
  10322.       U403044 from IBM and users of AIX 3.2 should request PTF U416277. See the 
  10323.       file `README.RS6000' for more details on these updates. 
  10324.  
  10325.       You can test for the presense of a fixed assembler by using the command 
  10326.  
  10327.             as -u < /dev/null
  10328.  
  10329.       If the command exits normally, the assembler fix already is installed. If 
  10330.       the assembler complains that "-u" is an unknown flag, you need to order 
  10331.       the fix. 
  10332.  
  10333.      On the IBM RS/6000, compiling code of the form 
  10334.  
  10335.             extern int foo;
  10336.  
  10337.             ... foo ...
  10338.  
  10339.             static int foo;
  10340.  
  10341.       will cause the linker to report an undefined symbol foo. Although this 
  10342.       behavior differs from most other systems, it is not a bug because 
  10343.       redefining an extern variable as static is undefined in ANSI C. 
  10344.  
  10345.      AIX on the RS/6000 provides support (NLS) for environments outside of the 
  10346.       United States.  Compilers and assemblers use NLS to support 
  10347.       locale-specific representations of various objects including 
  10348.       floating-point numbers ("." vs "," for separating decimal fractions). 
  10349.       There have been problems reported where the library linked with GCC does 
  10350.       not produce the same floating-point formats that the assembler accepts. 
  10351.       If you have this problem, set the LANG environment variable to "C" or 
  10352.       "En_US". 
  10353.  
  10354.      Even if you specify `-fdollars-in-identifiers', you cannot successfully 
  10355.       use `$' in identifiers on the RS/6000 due to a restriction in the IBM 
  10356.       assembler.  GAS supports these identifiers. 
  10357.  
  10358.      On the RS/6000, XLC version 1.3.0.0 will miscompile `jump.c'.  XLC 
  10359.       version 1.3.0.1 or later fixes this problem.  You can obtain XLC-1.3.0.2 
  10360.       by requesting PTF 421749 from IBM. 
  10361.  
  10362.      There is an assembler bug in versions of DG/UX prior to 5.4.2.01 that 
  10363.       occurs when the `fldcr' instruction is used.  GNU CC uses `fldcr' on the 
  10364.       88100 to serialize volatile memory references.  Use the option 
  10365.       `-mno-serialize-volatile' if your version of the assembler has this bug. 
  10366.  
  10367.      On VMS, GAS versions 1.38.1 and earlier may cause spurious warning 
  10368.       messages from the linker.  These warning messages complain of mismatched 
  10369.       psect attributes.  You can ignore them.  See VMS Install. 
  10370.  
  10371.      On NewsOS version 3, if you include both of the files `stddef.h' and 
  10372.       `sys/types.h', you get an error because there are two typedefs of size_t. 
  10373.       You should change `sys/types.h' by adding these lines around the 
  10374.       definition of size_t: 
  10375.  
  10376.             #ifndef _SIZE_T
  10377.             #define _SIZE_T
  10378.             actual typedef here
  10379.             #endif
  10380.  
  10381.      On the Alliant, the system's own convention for returning structures and 
  10382.       unions is unusual, and is not compatible with GNU CC no matter what 
  10383.       options are used. 
  10384.  
  10385.      On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different 
  10386.       convention for structure and union returning.  Use the option 
  10387.       `-mhc-struct-return' to tell GNU CC to use a convention compatible with 
  10388.       it. 
  10389.  
  10390.      On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved 
  10391.       by function calls.  However, the C compiler uses conventions compatible 
  10392.       with BSD Unix: registers 2 through 5 may be clobbered by function calls. 
  10393.  
  10394.       GNU CC uses the same convention as the Ultrix C compiler.  You can use 
  10395.       these options to produce code compatible with the Fortran compiler: 
  10396.  
  10397.             -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
  10398.  
  10399.      On the WE32k, you may find that programs compiled with GNU CC do not work 
  10400.       with the standard shared C library.  You may need to link with the 
  10401.       ordinary C compiler.  If you do so, you must specify the following 
  10402.       options: 
  10403.  
  10404.             -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.7.1 -lgcc -lc_s
  10405.  
  10406.       The first specifies where to find the library `libgcc.a' specified with 
  10407.       the `-lgcc' option. 
  10408.  
  10409.       GNU CC does linking by invoking ld, just as cc does, and there is no 
  10410.       reason why it should matter which compilation program you use to invoke 
  10411.       ld.  If someone tracks this problem down, it can probably be fixed 
  10412.       easily. 
  10413.  
  10414.      On the Alpha, you may get assembler errors about invalid syntax as a 
  10415.       result of floating point constants.  This is due to a bug in the C 
  10416.       library functions ecvt, fcvt and gcvt.  Given valid floating point 
  10417.       numbers, they sometimes print `NaN'. 
  10418.  
  10419.      On Irix 4.0.5F (and perhaps in some other versions), an assembler bug 
  10420.       sometimes reorders instructions incorrectly when optimization is turned 
  10421.       on.  If you think this may be happening to you, try using the GNU 
  10422.       assembler; GAS version 2.1 supports ECOFF on Irix. 
  10423.  
  10424.       Or use the `-noasmopt' option when you compile GNU CC with itself, and 
  10425.       then again when you compile your program.  (This is a temporary kludge to 
  10426.       turn off assembler optimization on Irix.)  If this proves to be what you 
  10427.       need, edit the assembler spec in the file `specs' so that it 
  10428.       unconditionally passes `-O0' to the assembler, and never passes `-O2' or 
  10429.       `-O3'. 
  10430.  
  10431.  
  10432. ΓòÉΓòÉΓòÉ 12.5. Problems Compiling Certain Programs ΓòÉΓòÉΓòÉ
  10433.  
  10434. Certain programs have problems compiling. 
  10435.  
  10436.      Parse errors may occur compiling X11 on a Decstation running Ultrix 4.2 
  10437.       because of problems in DEC's versions of the X11 header files 
  10438.       `X11/Xlib.h' and `X11/Xutil.h'.  People recommend adding 
  10439.       `-I/usr/include/mit' to use the MIT versions of the header files, using 
  10440.       the `-traditional' switch to turn off ANSI C, or fixing the header files 
  10441.       by adding this: 
  10442.  
  10443.             #ifdef __STDC__
  10444.             #define NeedFunctionPrototypes 0
  10445.             #endif
  10446.  
  10447.      If you have trouble compiling Perl on a SunOS 4 system, it may be because 
  10448.       Perl specifies `-I/usr/ucbinclude'.  This accesses the unfixed header 
  10449.       files.  Perl specifies the options 
  10450.  
  10451.             -traditional -Dvolatile=__volatile__
  10452.             -I/usr/include/sun -I/usr/ucbinclude
  10453.             -fpcc-struct-return
  10454.  
  10455.       most of which are unnecessary with GCC 2.4.5 and newer versions.  You can 
  10456.       make a properly working Perl by setting ccflags to `-fwritable-strings' 
  10457.       (implied by the `-traditional' in the original options) and cppflags to 
  10458.       empty in `config.sh', then typing `./doSH; make depend; make'. 
  10459.  
  10460.      On various 386 Unix systems derived from System V, including SCO, ISC, 
  10461.       and ESIX, you may get error messages about running out of virtual memory 
  10462.       while compiling certain programs. 
  10463.  
  10464.       You can prevent this problem by linking GNU CC with the GNU malloc (which 
  10465.       thus replaces the malloc that comes with the system).  GNU malloc is 
  10466.       available as a separate package, and also in the file `src/gmalloc.c' in 
  10467.       the GNU Emacs 19 distribution. 
  10468.  
  10469.       If you have installed GNU malloc as a separate library package, use this 
  10470.       option when you relink GNU CC: 
  10471.  
  10472.             MALLOC=/usr/local/lib/libgmalloc.a
  10473.  
  10474.       Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy the 
  10475.       object file to `gmalloc.o' and use this option when you relink GNU CC: 
  10476.  
  10477.             MALLOC=gmalloc.o
  10478.  
  10479.  
  10480. ΓòÉΓòÉΓòÉ 12.6. Incompatibilities of GNU CC ΓòÉΓòÉΓòÉ
  10481.  
  10482. There are several noteworthy incompatibilities between GNU C and most existing 
  10483. (non-ANSI) versions of C.  The `-traditional' option eliminates many of these 
  10484. incompatibilities, but not all, by telling GNU C to behave like the other C 
  10485. compilers. 
  10486.  
  10487.      GNU CC normally makes string constants read-only.  If several 
  10488.       identical-looking string constants are used, GNU CC stores only one copy 
  10489.       of the string. 
  10490.  
  10491.       One consequence is that you cannot call mktemp with a string constant 
  10492.       argument.  The function mktemp always alters the string its argument 
  10493.       points to. 
  10494.  
  10495.       Another consequence is that sscanf does not work on some systems when 
  10496.       passed a string constant as its format control string or input. This is 
  10497.       because sscanf incorrectly tries to write into the string constant. 
  10498.       Likewise fscanf and scanf. 
  10499.  
  10500.       The best solution to these problems is to change the program to use 
  10501.       char-array variables with initialization strings for these purposes 
  10502.       instead of string constants.  But if this is not possible, you can use 
  10503.       the `-fwritable-strings' flag, which directs GNU CC to handle string 
  10504.       constants the same way most C compilers do. `-traditional' also has this 
  10505.       effect, among others. 
  10506.  
  10507.      -2147483648 is positive. 
  10508.  
  10509.       This is because 2147483648 cannot fit in the type int, so (following the 
  10510.       ANSI C rules) its data type is unsigned long int. Negating this value 
  10511.       yields 2147483648 again. 
  10512.  
  10513.      GNU CC does not substitute macro arguments when they appear inside of 
  10514.       string constants.  For example, the following macro in GNU CC 
  10515.  
  10516.             #define foo(a) "a"
  10517.  
  10518.       will produce output "a" regardless of what the argument a is. 
  10519.  
  10520.       The `-traditional' option directs GNU CC to handle such cases (among 
  10521.       others) in the old-fashioned (non-ANSI) fashion. 
  10522.  
  10523.      When you use setjmp and longjmp, the only automatic variables guaranteed 
  10524.       to remain valid are those declared volatile.  This is a consequence of 
  10525.       automatic register allocation.  Consider this function: 
  10526.  
  10527.             jmp_buf j;
  10528.  
  10529.             foo ()
  10530.             {
  10531.               int a, b;
  10532.  
  10533.               a = fun1 ();
  10534.               if (setjmp (j))
  10535.                 return a;
  10536.  
  10537.               a = fun2 ();
  10538.               /* longjmp (j) may occur in fun3. */
  10539.               return a + fun3 ();
  10540.             }
  10541.  
  10542.       Here a may or may not be restored to its first value when the longjmp 
  10543.       occurs.  If a is allocated in a register, then its first value is 
  10544.       restored; otherwise, it keeps the last value stored in it. 
  10545.  
  10546.       If you use the `-W' option with the `-O' option, you will get a warning 
  10547.       when GNU CC thinks such a problem might be possible. 
  10548.  
  10549.       The `-traditional' option directs GNU C to put variables in the stack by 
  10550.       default, rather than in registers, in functions that call setjmp.  This 
  10551.       results in the behavior found in traditional C compilers. 
  10552.  
  10553.      Programs that use preprocessing directives in the middle of macro 
  10554.       arguments do not work with GNU CC.  For example, a program like this will 
  10555.       not work: 
  10556.  
  10557.             foobar (
  10558.             #define luser
  10559.                     hack)
  10560.  
  10561.       ANSI C does not permit such a construct.  It would make sense to support 
  10562.       it when `-traditional' is used, but it is too much work to implement. 
  10563.  
  10564.      Declarations of external variables and functions within a block apply 
  10565.       only to the block containing the declaration.  In other words, they have 
  10566.       the same scope as any other declaration in the same place. 
  10567.  
  10568.       In some other C compilers, a extern declaration affects all the rest of 
  10569.       the file even if it happens within a block. 
  10570.  
  10571.       The `-traditional' option directs GNU C to treat all extern declarations 
  10572.       as global, like traditional compilers. 
  10573.  
  10574.      In traditional C, you can combine long, etc., with a typedef name, as 
  10575.       shown here: 
  10576.  
  10577.             typedef int foo;
  10578.             typedef long foo bar;
  10579.  
  10580.       In ANSI C, this is not allowed: long and other type modifiers require an 
  10581.       explicit int.  Because this criterion is expressed by Bison grammar rules 
  10582.       rather than C code, the `-traditional' flag cannot alter it. 
  10583.  
  10584.      PCC allows typedef names to be used as function parameters.  The 
  10585.       difficulty described immediately above applies here too. 
  10586.  
  10587.      PCC allows whitespace in the middle of compound assignment operators such 
  10588.       as `+='.  GNU CC, following the ANSI standard, does not allow this.  The 
  10589.       difficulty described immediately above applies here too. 
  10590.  
  10591.      GNU CC complains about unterminated character constants inside of 
  10592.       preprocessing conditionals that fail.  Some programs have English 
  10593.       comments enclosed in conditionals that are guaranteed to fail; if these 
  10594.       comments contain apostrophes, GNU CC will probably report an error.  For 
  10595.       example, this code would produce an error: 
  10596.  
  10597.             #if 0
  10598.             You can't expect this to work.
  10599.             #endif
  10600.  
  10601.       The best solution to such a problem is to put the text into an actual C 
  10602.       comment delimited by `/*...*/'.  However, `-traditional' suppresses these 
  10603.       error messages. 
  10604.  
  10605.      Many user programs contain the declaration `long time ();'.  In the past, 
  10606.       the system header files on many systems did not actually declare time, so 
  10607.       it did not matter what type your program declared it to return.  But in 
  10608.       systems with ANSI C headers, time is declared to return time_t, and if 
  10609.       that is not the same as long, then `long time ();' is erroneous. 
  10610.  
  10611.       The solution is to change your program to use time_t as the return type 
  10612.       of time. 
  10613.  
  10614.      When compiling functions that return float, PCC converts it to a double. 
  10615.       GNU CC actually returns a float.  If you are concerned with PCC 
  10616.       compatibility, you should declare your functions to return double; you 
  10617.       might as well say what you mean. 
  10618.  
  10619.      When compiling functions that return structures or unions, GNU CC output 
  10620.       code normally uses a method different from that used on most versions of 
  10621.       Unix.  As a result, code compiled with GNU CC cannot call a 
  10622.       structure-returning function compiled with PCC, and vice versa. 
  10623.  
  10624.       The method used by GNU CC is as follows: a structure or union which is 1, 
  10625.       2, 4 or 8 bytes long is returned like a scalar.  A structure or union 
  10626.       with any other size is stored into an address supplied by the caller 
  10627.       (usually in a special, fixed register, but on some machines it is passed 
  10628.       on the stack).  The machine-description macros STRUCT_VALUE and 
  10629.       STRUCT_INCOMING_VALUE tell GNU CC where to pass this address. 
  10630.  
  10631.       By contrast, PCC on most target machines returns structures and unions of 
  10632.       any size by copying the data into an area of static storage, and then 
  10633.       returning the address of that storage as if it were a pointer value. The 
  10634.       caller must copy the data from that memory area to the place where the 
  10635.       value is wanted.  GNU CC does not use this method because it is slower 
  10636.       and nonreentrant. 
  10637.  
  10638.       On some newer machines, PCC uses a reentrant convention for all structure 
  10639.       and union returning.  GNU CC on most of these machines uses a compatible 
  10640.       convention when returning structures and unions in memory, but still 
  10641.       returns small structures and unions in registers. 
  10642.  
  10643.       You can tell GNU CC to use a compatible convention for all structure and 
  10644.       union returning with the option `-fpcc-struct-return'. 
  10645.  
  10646.      GNU C complains about program fragments such as `0x74ae-0x4000' which 
  10647.       appear to be two hexadecimal constants separated by the minus operator. 
  10648.       Actually, this string is a single preprocessing token. Each such token 
  10649.       must correspond to one token in C.  Since this does not, GNU C prints an 
  10650.       error message.  Although it may appear obvious that what is meant is an 
  10651.       operator and two values, the ANSI C standard specifically requires that 
  10652.       this be treated as erroneous. 
  10653.  
  10654.       A preprocessing token is a preprocessing number if it begins with a digit 
  10655.       and is followed by letters, underscores, digits, periods and `e+', `e-', 
  10656.       `E+', or `E-' character sequences. 
  10657.  
  10658.       To make the above program fragment valid, place whitespace in front of 
  10659.       the minus sign.  This whitespace will end the preprocessing number. 
  10660.  
  10661.  
  10662. ΓòÉΓòÉΓòÉ 12.7. Fixed Header Files ΓòÉΓòÉΓòÉ
  10663.  
  10664. GNU CC needs to install corrected versions of some system header files. This is 
  10665. because most target systems have some header files that won't work with GNU CC 
  10666. unless they are changed.  Some have bugs, some are incompatible with ANSI C, 
  10667. and some depend on special features of other compilers. 
  10668.  
  10669. Installing GNU CC automatically creates and installs the fixed header files, by 
  10670. running a program called fixincludes (or for certain targets an alternative 
  10671. such as fixinc.svr4).  Normally, you don't need to pay attention to this.  But 
  10672. there are cases where it doesn't do the right thing automatically. 
  10673.  
  10674.      If you update the system's header files, such as by installing a new 
  10675.       system version, the fixed header files of GNU CC are not automatically 
  10676.       updated.  The easiest way to update them is to reinstall GNU CC.  (If you 
  10677.       want to be clever, look in the makefile and you can find a shortcut.) 
  10678.  
  10679.      On some systems, in particular SunOS 4, header file directories contain 
  10680.       machine-specific symbolic links in certain places.  This makes it 
  10681.       possible to share most of the header files among hosts running the same 
  10682.       version of SunOS 4 on different machine models. 
  10683.  
  10684.       The programs that fix the header files do not understand this special way 
  10685.       of using symbolic links; therefore, the directory of fixed header files 
  10686.       is good only for the machine model used to build it. 
  10687.  
  10688.       In SunOS 4, only programs that look inside the kernel will notice the 
  10689.       difference between machine models.  Therefore, for most purposes, you 
  10690.       need not be concerned about this. 
  10691.  
  10692.       It is possible to make separate sets of fixed header files for the 
  10693.       different machine models, and arrange a structure of symbolic links so as 
  10694.       to use the proper set, but you'll have to do this by hand. 
  10695.  
  10696.      On Lynxos, GNU CC by default does not fix the header files.  This is 
  10697.       because bugs in the shell cause the fixincludes script to fail. 
  10698.  
  10699.       This means you will encounter problems due to bugs in the system header 
  10700.       files.  It may be no comfort that they aren't GNU CC's fault, but it does 
  10701.       mean that there's nothing for us to do about them. 
  10702.  
  10703.  
  10704. ΓòÉΓòÉΓòÉ 12.8. Standard Libraries ΓòÉΓòÉΓòÉ
  10705.  
  10706. GNU CC by itself attempts to be what the ISO/ANSI C standard calls a conforming 
  10707. freestanding implementation.  This means all ANSI C language features are 
  10708. available, as well as the contents of `float.h', `limits.h', `stdarg.h', and 
  10709. `stddef.h'.  The rest of the C library is supplied by the vendor of the 
  10710. operating system.  If that C library doesn't conform to the C standards, then 
  10711. your programs might get warnings (especially when using `-Wall') that you don't 
  10712. expect. 
  10713.  
  10714. For example, the sprintf function on SunOS 4.1.3 returns char * while the C 
  10715. standard says that sprintf returns an int.  The fixincludes program could make 
  10716. the prototype for this function match the Standard, but that would be wrong, 
  10717. since the function will still return char *. 
  10718.  
  10719. If you need a Standard compliant library, then you need to find one, as GNU CC 
  10720. does not provide one.  The GNU C library (called glibc) has been ported to a 
  10721. number of operating systems, and provides ANSI/ISO, POSIX, BSD and SystemV 
  10722. compatibility.  You could also ask your operating system vendor if newer 
  10723. libraries are available. 
  10724.  
  10725.  
  10726. ΓòÉΓòÉΓòÉ 12.9. Disappointments and Misunderstandings ΓòÉΓòÉΓòÉ
  10727.  
  10728. These problems are perhaps regrettable, but we don't know any practical way 
  10729. around them. 
  10730.  
  10731.      Certain local variables aren't recognized by debuggers when you compile 
  10732.       with optimization. 
  10733.  
  10734.       This occurs because sometimes GNU CC optimizes the variable out of 
  10735.       existence.  There is no way to tell the debugger how to compute the value 
  10736.       such a variable ``would have had'', and it is not clear that would be 
  10737.       desirable anyway.  So GNU CC simply does not mention the eliminated 
  10738.       variable when it writes debugging information. 
  10739.  
  10740.       You have to expect a certain amount of disagreement between the 
  10741.       executable and your source code, when you use optimization. 
  10742.  
  10743.      Users often think it is a bug when GNU CC reports an error for code like 
  10744.       this: 
  10745.  
  10746.             int foo (struct mumble *);
  10747.  
  10748.             struct mumble { ... };
  10749.  
  10750.             int foo (struct mumble *x)
  10751.             { ... }
  10752.  
  10753.       This code really is erroneous, because the scope of struct mumble in the 
  10754.       prototype is limited to the argument list containing it. It does not 
  10755.       refer to the struct mumble defined with file scope immediately 
  10756.       below---they are two unrelated types with similar names in different 
  10757.       scopes. 
  10758.  
  10759.       But in the definition of foo, the file-scope type is used because that is 
  10760.       available to be inherited.  Thus, the definition and the prototype do not 
  10761.       match, and you get an error. 
  10762.  
  10763.       This behavior may seem silly, but it's what the ANSI standard specifies. 
  10764.       It is easy enough for you to make your code work by moving the definition 
  10765.       of struct mumble above the prototype.  It's not worth being incompatible 
  10766.       with ANSI C just to avoid an error for the example shown above. 
  10767.  
  10768.      Accesses to bitfields even in volatile objects works by accessing larger 
  10769.       objects, such as a byte or a word.  You cannot rely on what size of 
  10770.       object is accessed in order to read or write the bitfield; it may even 
  10771.       vary for a given bitfield according to the precise usage. 
  10772.  
  10773.       If you care about controlling the amount of memory that is accessed, use 
  10774.       volatile but do not use bitfields. 
  10775.  
  10776.      GNU CC comes with shell scripts to fix certain known problems in system 
  10777.       header files.  They install corrected copies of various header files in a 
  10778.       special directory where only GNU CC will normally look for them.  The 
  10779.       scripts adapt to various systems by searching all the system header files 
  10780.       for the problem cases that we know about. 
  10781.  
  10782.       If new system header files are installed, nothing automatically arranges 
  10783.       to update the corrected header files.  You will have to reinstall GNU CC 
  10784.       to fix the new header files.  More specifically, go to the build 
  10785.       directory and delete the files `stmp-fixinc' and `stmp-headers', and the 
  10786.       subdirectory include; then do `make install' again. 
  10787.  
  10788.      On 68000 systems, you can get paradoxical results if you test the precise 
  10789.       values of floating point numbers.  For example, you can find that a 
  10790.       floating point value which is not a NaN is not equal to itself. This 
  10791.       results from the fact that the the floating point registers hold a few 
  10792.       more bits of precision than fit in a double in memory. Compiled code 
  10793.       moves values between memory and floating point registers at its 
  10794.       convenience, and moving them into memory truncates them. 
  10795.  
  10796.       You can partially avoid this problem by using the `-ffloat-store' option 
  10797.       (see Optimize Options). 
  10798.  
  10799.      On the MIPS, variable argument functions using `varargs.h' cannot have a 
  10800.       floating point value for the first argument.  The reason for this is that 
  10801.       in the absence of a prototype in scope, if the first argument is a 
  10802.       floating point, it is passed in a floating point register, rather than an 
  10803.       integer register. 
  10804.  
  10805.       If the code is rewritten to use the ANSI standard `stdarg.h' method of 
  10806.       variable arguments, and the prototype is in scope at the time of the 
  10807.       call, everything will work fine. 
  10808.  
  10809.  
  10810. ΓòÉΓòÉΓòÉ 12.10. Common Misunderstandings with GNU C++ ΓòÉΓòÉΓòÉ
  10811.  
  10812. C++ is a complex language and an evolving one, and its standard definition (the 
  10813. ANSI C++ draft standard) is also evolving.  As a result, your C++ compiler may 
  10814. occasionally surprise you, even when its behavior is correct.  This section 
  10815. discusses some areas that frequently give rise to questions of this sort. 
  10816.  
  10817.  Static Definitions                      Static member declarations are not 
  10818.                                          definitions 
  10819.  Temporaries                             Temporaries may vanish before you 
  10820.                                          expect 
  10821.  
  10822.  
  10823. ΓòÉΓòÉΓòÉ 12.10.1. Declare and Define Static Members ΓòÉΓòÉΓòÉ
  10824.  
  10825. When a class has static data members, it is not enough to declare the static 
  10826. member; you must also define it.  For example: 
  10827.  
  10828. class Foo
  10829. {
  10830.   ...
  10831.   void method();
  10832.   static int bar;
  10833. };
  10834.  
  10835. This declaration only establishes that the class Foo has an int named Foo::bar, 
  10836. and a member function named Foo::method.  But you still need to define both 
  10837. method and bar elsewhere.  According to the draft ANSI standard, you must 
  10838. supply an initializer in one (and only one) source file, such as: 
  10839.  
  10840. int Foo::bar = 0;
  10841.  
  10842. Other C++ compilers may not correctly implement the standard behavior. As a 
  10843. result, when you switch to g++ from one of these compilers, you may discover 
  10844. that a program that appeared to work correctly in fact does not conform to the 
  10845. standard: g++ reports as undefined symbols any static data members that lack 
  10846. definitions. 
  10847.  
  10848.  
  10849. ΓòÉΓòÉΓòÉ 12.10.2. Temporaries May Vanish Before You Expect ΓòÉΓòÉΓòÉ
  10850.  
  10851. It is dangerous to use pointers or references to portions of a temporary 
  10852. object.  The compiler may very well delete the object before you expect it to, 
  10853. leaving a pointer to garbage.  The most common place where this problem crops 
  10854. up is in classes like the libg++ String class, that define a conversion 
  10855. function to type char * or const char *.  However, any class that returns a 
  10856. pointer to some internal structure is potentially subject to this problem. 
  10857.  
  10858. For example, a program may use a function strfunc that returns String objects, 
  10859. and another function charfunc that operates on pointers to char: 
  10860.  
  10861. String strfunc ();
  10862. void charfunc (const char *);
  10863.  
  10864. In this situation, it may seem natural to write `charfunc (strfunc ());' based 
  10865. on the knowledge that class String has an explicit conversion to char pointers. 
  10866. However, what really happens is akin to `charfunc (strfunc ().convert ());', 
  10867. where the convert method is a function to do the same data conversion normally 
  10868. performed by a cast.  Since the last use of the temporary String object is the 
  10869. call to the conversion function, the compiler may delete that object before 
  10870. actually calling charfunc.  The compiler has no way of knowing that deleting 
  10871. the String object will invalidate the pointer.  The pointer then points to 
  10872. garbage, so that by the time charfunc is called, it gets an invalid argument. 
  10873.  
  10874. Code like this may run successfully under some other compilers, especially 
  10875. those that delete temporaries relatively late.  However, the GNU C++ behavior 
  10876. is also standard-conforming, so if your program depends on late destruction of 
  10877. temporaries it is not portable. 
  10878.  
  10879. If you think this is surprising, you should be aware that the ANSI C++ 
  10880. committee continues to debate the lifetime-of-temporaries problem. 
  10881.  
  10882. For now, at least, the safe way to write such code is to give the temporary a 
  10883. name, which forces it to remain until the end of the scope of the name.  For 
  10884. example: 
  10885.  
  10886. String& tmp = strfunc ();
  10887. charfunc (tmp);
  10888.  
  10889.  
  10890. ΓòÉΓòÉΓòÉ 12.11. Caveats of using protoize ΓòÉΓòÉΓòÉ
  10891.  
  10892. The conversion programs protoize and unprotoize can sometimes change a source 
  10893. file in a way that won't work unless you rearrange it. 
  10894.  
  10895.      protoize can insert references to a type name or type tag before the 
  10896.       definition, or in a file where they are not defined. 
  10897.  
  10898.       If this happens, compiler error messages should show you where the new 
  10899.       references are, so fixing the file by hand is straightforward. 
  10900.  
  10901.      There are some C constructs which protoize cannot figure out. For 
  10902.       example, it can't determine argument types for declaring a 
  10903.       pointer-to-function variable; this you must do by hand.  protoize inserts 
  10904.       a comment containing `???' each time it finds such a variable; so you can 
  10905.       find all such variables by searching for this string.  ANSI C does not 
  10906.       require declaring the argument types of pointer-to-function types. 
  10907.  
  10908.      Using unprotoize can easily introduce bugs.  If the program relied on 
  10909.       prototypes to bring about conversion of arguments, these conversions will 
  10910.       not take place in the program without prototypes. One case in which you 
  10911.       can be sure unprotoize is safe is when you are removing prototypes that 
  10912.       were made with protoize; if the program worked before without any 
  10913.       prototypes, it will work again without them. 
  10914.  
  10915.       You can find all the places where this problem might occur by compiling 
  10916.       the program with the `-Wconversion' option.  It prints a warning whenever 
  10917.       an argument is converted. 
  10918.  
  10919.      Both conversion programs can be confused if there are macro calls in and 
  10920.       around the text to be converted.  In other words, the standard syntax for 
  10921.       a declaration or definition must not result from expanding a macro. This 
  10922.       problem is inherent in the design of C and cannot be fixed.  If only a 
  10923.       few functions have confusing macro calls, you can easily convert them 
  10924.       manually. 
  10925.  
  10926.      protoize cannot get the argument types for a function whose definition 
  10927.       was not actually compiled due to preprocessing conditionals. When this 
  10928.       happens, protoize changes nothing in regard to such a function.  protoize 
  10929.       tries to detect such instances and warn about them. 
  10930.  
  10931.       You can generally work around this problem by using protoize step by 
  10932.       step, each time specifying a different set of `-D' options for 
  10933.       compilation, until all of the functions have been converted.  There is no 
  10934.       automatic way to verify that you have got them all, however. 
  10935.  
  10936.      Confusion may result if there is an occasion to convert a function 
  10937.       declaration or definition in a region of source code where there is more 
  10938.       than one formal parameter list present.  Thus, attempts to convert code 
  10939.       containing multiple (conditionally compiled) versions of a single 
  10940.       function header (in the same vicinity) may not produce the desired (or 
  10941.       expected) results. 
  10942.  
  10943.       If you plan on converting source files which contain such code, it is 
  10944.       recommended that you first make sure that each conditionally compiled 
  10945.       region of source code which contains an alternative function header also 
  10946.       contains at least one additional follower token (past the final right 
  10947.       parenthesis of the function header).  This should circumvent the problem. 
  10948.  
  10949.      unprotoize can become confused when trying to convert a function 
  10950.       definition or declaration which contains a declaration for a 
  10951.       pointer-to-function formal argument which has the same name as the 
  10952.       function being defined or declared.  We recommand you avoid such choices 
  10953.       of formal parameter names. 
  10954.  
  10955.      You might also want to correct some of the indentation by hand and break 
  10956.       long lines.  (The conversion programs don't write lines longer than 
  10957.       eighty characters in any case.) 
  10958.  
  10959.  
  10960. ΓòÉΓòÉΓòÉ 12.12. Certain Changes We Don't Want to Make ΓòÉΓòÉΓòÉ
  10961.  
  10962. This section lists changes that people frequently request, but which we do not 
  10963. make because we think GNU CC is better without them. 
  10964.  
  10965.      Checking the number and type of arguments to a function which has an 
  10966.       old-fashioned definition and no prototype. 
  10967.  
  10968.       Such a feature would work only occasionally---only for calls that appear 
  10969.       in the same file as the called function, following the definition.  The 
  10970.       only way to check all calls reliably is to add a prototype for the 
  10971.       function.  But adding a prototype eliminates the motivation for this 
  10972.       feature.  So the feature is not worthwhile. 
  10973.  
  10974.      Warning about using an expression whose type is signed as a shift count. 
  10975.  
  10976.       Shift count operands are probably signed more often than unsigned. 
  10977.       Warning about this would cause far more annoyance than good. 
  10978.  
  10979.      Warning about assigning a signed value to an unsigned variable. 
  10980.  
  10981.       Such assignments must be very common; warning about them would cause more 
  10982.       annoyance than good. 
  10983.  
  10984.      Warning about unreachable code. 
  10985.  
  10986.       It's very common to have unreachable code in machine-generated programs. 
  10987.       For example, this happens normally in some files of GNU C itself. 
  10988.  
  10989.      Warning when a non-void function value is ignored. 
  10990.  
  10991.       Coming as I do from a Lisp background, I balk at the idea that there is 
  10992.       something dangerous about discarding a value.  There are functions that 
  10993.       return values which some callers may find useful; it makes no sense to 
  10994.       clutter the program with a cast to void whenever the value isn't useful. 
  10995.  
  10996.      Assuming (for optimization) that the address of an external symbol is 
  10997.       never zero. 
  10998.  
  10999.       This assumption is false on certain systems when `#pragma weak' is used. 
  11000.  
  11001.      Making `-fshort-enums' the default. 
  11002.  
  11003.       This would cause storage layout to be incompatible with most other C 
  11004.       compilers.  And it doesn't seem very important, given that you can get 
  11005.       the same result in other ways.  The case where it matters most is when 
  11006.       the enumeration-valued object is inside a structure, and in that case you 
  11007.       can specify a field width explicitly. 
  11008.  
  11009.      Making bitfields unsigned by default on particular machines where ``the 
  11010.       ABI standard'' says to do so. 
  11011.  
  11012.       The ANSI C standard leaves it up to the implementation whether a bitfield 
  11013.       declared plain int is signed or not.  This in effect creates two 
  11014.       alternative dialects of C. 
  11015.  
  11016.       The GNU C compiler supports both dialects; you can specify the signed 
  11017.       dialect with `-fsigned-bitfields' and the unsigned dialect with 
  11018.       `-funsigned-bitfields'.  However, this leaves open the question of which 
  11019.       dialect to use by default. 
  11020.  
  11021.       Currently, the preferred dialect makes plain bitfields signed, because 
  11022.       this is simplest.  Since int is the same as signed int in every other 
  11023.       context, it is cleanest for them to be the same in bitfields as well. 
  11024.  
  11025.       Some computer manufacturers have published Application Binary Interface 
  11026.       standards which specify that plain bitfields should be unsigned.  It is a 
  11027.       mistake, however, to say anything about this issue in an ABI.  This is 
  11028.       because the handling of plain bitfields distinguishes two dialects of C. 
  11029.       Both dialects are meaningful on every type of machine.  Whether a 
  11030.       particular object file was compiled using signed bitfields or unsigned is 
  11031.       of no concern to other object files, even if they access the same 
  11032.       bitfields in the same data structures. 
  11033.  
  11034.       A given program is written in one or the other of these two dialects. The 
  11035.       program stands a chance to work on most any machine if it is compiled 
  11036.       with the proper dialect.  It is unlikely to work at all if compiled with 
  11037.       the wrong dialect. 
  11038.  
  11039.       Many users appreciate the GNU C compiler because it provides an 
  11040.       environment that is uniform across machines.  These users would be 
  11041.       inconvenienced if the compiler treated plain bitfields differently on 
  11042.       certain machines. 
  11043.  
  11044.       Occasionally users write programs intended only for a particular machine 
  11045.       type.  On these occasions, the users would benefit if the GNU C compiler 
  11046.       were to support by default the same dialect as the other compilers on 
  11047.       that machine.  But such applications are rare.  And users writing a 
  11048.       program to run on more than one type of machine cannot possibly benefit 
  11049.       from this kind of compatibility. 
  11050.  
  11051.       This is why GNU CC does and will treat plain bitfields in the same 
  11052.       fashion on all types of machines (by default). 
  11053.  
  11054.       There are some arguments for making bitfields unsigned by default on all 
  11055.       machines.  If, for example, this becomes a universal de facto standard, 
  11056.       it would make sense for GNU CC to go along with it.  This is something to 
  11057.       be considered in the future. 
  11058.  
  11059.       (Of course, users strongly concerned about portability should indicate 
  11060.       explicitly in each bitfield whether it is signed or not.  In this way, 
  11061.       they write programs which have the same meaning in both C dialects.) 
  11062.  
  11063.      Undefining __STDC__ when `-ansi' is not used. 
  11064.  
  11065.       Currently, GNU CC defines __STDC__ as long as you don't use 
  11066.       `-traditional'.  This provides good results in practice. 
  11067.  
  11068.       Programmers normally use conditionals on __STDC__ to ask whether it is 
  11069.       safe to use certain features of ANSI C, such as function prototypes or 
  11070.       ANSI token concatenation.  Since plain `gcc' supports all the features of 
  11071.       ANSI C, the correct answer to these questions is ``yes''. 
  11072.  
  11073.       Some users try to use __STDC__ to check for the availability of certain 
  11074.       library facilities.  This is actually incorrect usage in an ANSI C 
  11075.       program, because the ANSI C standard says that a conforming freestanding 
  11076.       implementation should define __STDC__ even though it does not have the 
  11077.       library facilities.  `gcc -ansi -pedantic' is a conforming freestanding 
  11078.       implementation, and it is therefore required to define __STDC__, even 
  11079.       though it does not come with an ANSI C library. 
  11080.  
  11081.       Sometimes people say that defining __STDC__ in a compiler that does not 
  11082.       completely conform to the ANSI C standard somehow violates the standard. 
  11083.       This is illogical.  The standard is a standard for compilers that claim 
  11084.       to support ANSI C, such as `gcc -ansi'---not for other compilers such as 
  11085.       plain `gcc'.  Whatever the ANSI C standard says is relevant to the design 
  11086.       of plain `gcc' without `-ansi' only for pragmatic reasons, not as a 
  11087.       requirement. 
  11088.  
  11089.      Undefining __STDC__ in C++. 
  11090.  
  11091.       Programs written to compile with C++-to-C translators get the value of 
  11092.       __STDC__ that goes with the C compiler that is subsequently used.  These 
  11093.       programs must test __STDC__ to determine what kind of C preprocessor that 
  11094.       compiler uses: whether they should concatenate tokens in the ANSI C 
  11095.       fashion or in the traditional fashion. 
  11096.  
  11097.       These programs work properly with GNU C++ if __STDC__ is defined. They 
  11098.       would not work otherwise. 
  11099.  
  11100.       In addition, many header files are written to provide prototypes in ANSI 
  11101.       C but not in traditional C.  Many of these header files can work without 
  11102.       change in C++ provided __STDC__ is defined.  If __STDC__ is not defined, 
  11103.       they will all fail, and will all need to be changed to test explicitly 
  11104.       for C++ as well. 
  11105.  
  11106.      Deleting ``empty'' loops. 
  11107.  
  11108.       GNU CC does not delete ``empty'' loops because the most likely reason you 
  11109.       would put one in a program is to have a delay.  Deleting them will not 
  11110.       make real programs run any faster, so it would be pointless. 
  11111.  
  11112.       It would be different if optimization of a nonempty loop could produce an 
  11113.       empty one.  But this generally can't happen. 
  11114.  
  11115.      Making side effects happen in the same order as in some other compiler. 
  11116.  
  11117.       It is never safe to depend on the order of evaluation of side effects. 
  11118.       For example, a function call like this may very well behave differently 
  11119.       from one compiler to another: 
  11120.  
  11121.             void func (int, int);
  11122.  
  11123.             int i = 2;
  11124.             func (i++, i++);
  11125.  
  11126.       There is no guarantee (in either the C or the C++ standard language 
  11127.       definitions) that the increments will be evaluated in any particular 
  11128.       order.  Either increment might happen first.  func might get the 
  11129.       arguments `2, 3', or it might get `3, 2', or even `2, 2'. 
  11130.  
  11131.      Not allowing structures with volatile fields in registers. 
  11132.  
  11133.       Strictly speaking, there is no prohibition in the ANSI C standard against 
  11134.       allowing structures with volatile fields in registers, but it does not 
  11135.       seem to make any sense and is probably not what you wanted to do.  So the 
  11136.       compiler will give an error message in this case. 
  11137.  
  11138.  
  11139. ΓòÉΓòÉΓòÉ 12.13. Warning Messages and Error Messages ΓòÉΓòÉΓòÉ
  11140.  
  11141. The GNU compiler can produce two kinds of diagnostics: errors and warnings. 
  11142. Each kind has a different purpose: 
  11143.  
  11144.      Errors report problems that make it impossible to compile your program. 
  11145.       GNU CC reports errors with the source file name and line number where the 
  11146.       problem is apparent. 
  11147.  
  11148.      Warnings report other unusual conditions in your code that may indicate a 
  11149.       problem, although compilation can (and does) proceed.  Warning messages 
  11150.       also report the source file name and line number, but include the text 
  11151.       `warning:' to distinguish them from error messages. 
  11152.  
  11153.  Warnings may indicate danger points where you should check to make sure that 
  11154.  your program really does what you intend; or the use of obsolete features; or 
  11155.  the use of nonstandard features of GNU C or C++.  Many warnings are issued 
  11156.  only if you ask for them, with one of the `-W' options (for instance, `-Wall' 
  11157.  requests a variety of useful warnings). 
  11158.  
  11159.  GNU CC always tries to compile your program if possible; it never gratuitously 
  11160.  rejects a program whose meaning is clear merely because (for instance) it 
  11161.  fails to conform to a standard.  In some cases, however, the C and C++ 
  11162.  standards specify that certain extensions are forbidden, and a diagnostic must 
  11163.  be issued by a conforming compiler.  The `-pedantic' option tells GNU CC to 
  11164.  issue warnings in such cases; `-pedantic-errors' says to make them errors 
  11165.  instead. This does not mean that all non-ANSI constructs get warnings or 
  11166.  errors. 
  11167.  
  11168.  See Options to Request or Suppress Warnings, for more detail on these and 
  11169.  related command-line options. 
  11170.  
  11171.  
  11172. ΓòÉΓòÉΓòÉ 13. Reporting Bugs ΓòÉΓòÉΓòÉ
  11173.  
  11174. Your bug reports play an essential role in making GNU CC reliable. 
  11175.  
  11176. When you encounter a problem, the first thing to do is to see if it is already 
  11177. known.  See Trouble.  If it isn't known, then you should report the problem. 
  11178.  
  11179. Reporting a bug may help you by bringing a solution to your problem, or it may 
  11180. not.  (If it does not, look in the service directory; see Service.)  In any 
  11181. case, the principal function of a bug report is to help the entire community by 
  11182. making the next version of GNU CC work better.  Bug reports are your 
  11183. contribution to the maintenance of GNU CC. 
  11184.  
  11185. Since the maintainers are very overloaded, we cannot respond to every bug 
  11186. report.  However, if the bug has not been fixed, we are likely to send you a 
  11187. patch and ask you to tell us whether it works. 
  11188.  
  11189. In order for a bug report to serve its purpose, you must include the 
  11190. information that makes for fixing the bug. 
  11191.  
  11192. * Criteria:  Bug Criteria.  Have you really found a bug? * Where: Bug Lists. 
  11193. Where to send your bug report. * Reporting: Bug Reporting.  How to report a bug 
  11194. effectively. * Patches: Sending Patches.  How to send a patch for GNU CC. * 
  11195. Known: Trouble.       Known problems. * Help: Service.       Where to ask for 
  11196. help. 
  11197.  
  11198.  
  11199. ΓòÉΓòÉΓòÉ 13.1. Have You Found a Bug? ΓòÉΓòÉΓòÉ
  11200.  
  11201. If you are not sure whether you have found a bug, here are some guidelines: 
  11202.  
  11203.      If the compiler gets a fatal signal, for any input whatever, that is a 
  11204.       compiler bug.  Reliable compilers never crash. 
  11205.  
  11206.      If the compiler produces invalid assembly code, for any input whatever 
  11207.       (except an asm statement), that is a compiler bug, unless the compiler 
  11208.       reports errors (not just warnings) which would ordinarily prevent the 
  11209.       assembler from being run. 
  11210.  
  11211.      If the compiler produces valid assembly code that does not correctly 
  11212.       execute the input source code, that is a compiler bug. 
  11213.  
  11214.       However, you must double-check to make sure, because you may have run 
  11215.       into an incompatibility between GNU C and traditional C (see 
  11216.       Incompatibilities).  These incompatibilities might be considered bugs, 
  11217.       but they are inescapable consequences of valuable features. 
  11218.  
  11219.       Or you may have a program whose behavior is undefined, which happened by 
  11220.       chance to give the desired results with another C or C++ compiler. 
  11221.  
  11222.       For example, in many nonoptimizing compilers, you can write `x;' at the 
  11223.       end of a function instead of `return x;', with the same results.  But the 
  11224.       value of the function is undefined if return is omitted; it is not a bug 
  11225.       when GNU CC produces different results. 
  11226.  
  11227.       Problems often result from expressions with two increment operators, as 
  11228.       in f (*p++, *p++).  Your previous compiler might have interpreted that 
  11229.       expression the way you intended; GNU CC might interpret it another way. 
  11230.       Neither compiler is wrong.  The bug is in your code. 
  11231.  
  11232.       After you have localized the error to a single source line, it should be 
  11233.       easy to check for these things.  If your program is correct and well 
  11234.       defined, you have found a compiler bug. 
  11235.  
  11236.      If the compiler produces an error message for valid input, that is a 
  11237.       compiler bug. 
  11238.  
  11239.      If the compiler does not produce an error message for invalid input, that 
  11240.       is a compiler bug.  However, you should note that your idea of ``invalid 
  11241.       input'' might be my idea of ``an extension'' or ``support for traditional 
  11242.       practice''. 
  11243.  
  11244.      If you are an experienced user of C or C++ compilers, your suggestions 
  11245.       for improvement of GNU CC or GNU C++ are welcome in any case. 
  11246.  
  11247.  
  11248. ΓòÉΓòÉΓòÉ 13.2. Where to Report Bugs ΓòÉΓòÉΓòÉ
  11249.  
  11250. Send bug reports for GNU C to `bug-gcc@prep.ai.mit.edu'. 
  11251.  
  11252. Send bug reports for GNU C++ to `bug-g++@prep.ai.mit.edu'. If your bug involves 
  11253. the C++ class library libg++, send mail to `bug-lib-g++@prep.ai.mit.edu'.  If 
  11254. you're not sure, you can send the bug report to both lists. 
  11255.  
  11256. *Do not send bug reports to `help-gcc@prep.ai.mit.edu' or to the newsgroup 
  11257. `gnu.gcc.help'.* Most users of GNU CC do not want to receive bug reports. 
  11258. Those that do, have asked to be on `bug-gcc' and/or `bug-g++'. 
  11259.  
  11260. The mailing lists `bug-gcc' and `bug-g++' both have newsgroups which serve as 
  11261. repeaters: `gnu.gcc.bug' and `gnu.g++.bug'. Each mailing list and its newsgroup 
  11262. carry exactly the same messages. 
  11263.  
  11264. Often people think of posting bug reports to the newsgroup instead of mailing 
  11265. them.  This appears to work, but it has one problem which can be crucial: a 
  11266. newsgroup posting does not contain a mail path back to the sender.  Thus, if 
  11267. maintainers need more information, they may be unable to reach you.  For this 
  11268. reason, you should always send bug reports by mail to the proper mailing list. 
  11269.  
  11270. As a last resort, send bug reports on paper to: 
  11271.  
  11272. GNU Compiler Bugs
  11273. Free Software Foundation
  11274. 59 Temple Place - Suite 330
  11275. Boston, MA 02111-1307, USA
  11276.  
  11277.  
  11278. ΓòÉΓòÉΓòÉ 13.3. How to Report Bugs ΓòÉΓòÉΓòÉ
  11279.  
  11280. The fundamental principle of reporting bugs usefully is this: *report all the 
  11281. facts*.  If you are not sure whether to state a fact or leave it out, state it! 
  11282.  
  11283. Often people omit facts because they think they know what causes the problem 
  11284. and they conclude that some details don't matter.  Thus, you might assume that 
  11285. the name of the variable you use in an example does not matter. Well, probably 
  11286. it doesn't, but one cannot be sure.  Perhaps the bug is a stray memory 
  11287. reference which happens to fetch from the location where that name is stored in 
  11288. memory; perhaps, if the name were different, the contents of that location 
  11289. would fool the compiler into doing the right thing despite the bug.  Play it 
  11290. safe and give a specific, complete example.  That is the easiest thing for you 
  11291. to do, and the most helpful. 
  11292.  
  11293. Keep in mind that the purpose of a bug report is to enable someone to fix the 
  11294. bug if it is not known.  It isn't very important what happens if the bug is 
  11295. already known.  Therefore, always write your bug reports on the assumption that 
  11296. the bug is not known. 
  11297.  
  11298. Sometimes people give a few sketchy facts and ask, ``Does this ring a bell?'' 
  11299. This cannot help us fix a bug, so it is basically useless.  We respond by 
  11300. asking for enough details to enable us to investigate. You might as well 
  11301. expedite matters by sending them to begin with. 
  11302.  
  11303. Try to make your bug report self-contained.  If we have to ask you for more 
  11304. information, it is best if you include all the previous information in your 
  11305. response, as well as the information that was missing. 
  11306.  
  11307. Please report each bug in a separate message.  This makes it easier for us to 
  11308. track which bugs have been fixed and to forward your bugs reports to the 
  11309. appropriate maintainer. 
  11310.  
  11311. Do not compress and encode any part of your bug report using programs such as 
  11312. `uuencode'.  If you do so it will slow down the processing of your bug.  If you 
  11313. must submit multiple large files, use `shar', which allows us to read your 
  11314. message without having to run any decompression programs. 
  11315.  
  11316. To enable someone to investigate the bug, you should include all these things: 
  11317.  
  11318.      The version of GNU CC.  You can get this by running it with the `-v' 
  11319.       option. 
  11320.  
  11321.       Without this, we won't know whether there is any point in looking for the 
  11322.       bug in the current version of GNU CC. 
  11323.  
  11324.      A complete input file that will reproduce the bug.  If the bug is in the 
  11325.       C preprocessor, send a source file and any header files that it requires. 
  11326.       If the bug is in the compiler proper (`cc1'), run your source file 
  11327.       through the C preprocessor by doing `gcc -E sourcefile > outfile', then 
  11328.       include the contents of outfile in the bug report.  (When you do this, 
  11329.       use the same `-I', `-D' or `-U' options that you used in actual 
  11330.       compilation.) 
  11331.  
  11332.       A single statement is not enough of an example.  In order to compile it, 
  11333.       it must be embedded in a complete file of compiler input; and the bug 
  11334.       might depend on the details of how this is done. 
  11335.  
  11336.       Without a real example one can compile, all anyone can do about your bug 
  11337.       report is wish you luck.  It would be futile to try to guess how to 
  11338.       provoke the bug.  For example, bugs in register allocation and reloading 
  11339.       frequently depend on every little detail of the function they happen in. 
  11340.  
  11341.       Even if the input file that fails comes from a GNU program, you should 
  11342.       still send the complete test case.  Don't ask the GNU CC maintainers to 
  11343.       do the extra work of obtaining the program in question---they are all 
  11344.       overworked as it is.  Also, the problem may depend on what is in the 
  11345.       header files on your system; it is unreliable for the GNU CC maintainers 
  11346.       to try the problem with the header files available to them.  By sending 
  11347.       CPP output, you can eliminate this source of uncertainty and save us a 
  11348.       certain percentage of wild goose chases. 
  11349.  
  11350.      The command arguments you gave GNU CC or GNU C++ to compile that example 
  11351.       and observe the bug.  For example, did you use `-O'?  To guarantee you 
  11352.       won't omit something important, list all the options. 
  11353.  
  11354.       If we were to try to guess the arguments, we would probably guess wrong 
  11355.       and then we would not encounter the bug. 
  11356.  
  11357.      The type of machine you are using, and the operating system name and 
  11358.       version number. 
  11359.  
  11360.      The operands you gave to the configure command when you installed the 
  11361.       compiler. 
  11362.  
  11363.      A complete list of any modifications you have made to the compiler 
  11364.       source.  (We don't promise to investigate the bug unless it happens in an 
  11365.       unmodified compiler.  But if you've made modifications and don't tell us, 
  11366.       then you are sending us on a wild goose chase.) 
  11367.  
  11368.       Be precise about these changes.  A description in English is not 
  11369.       enough---send a context diff for them. 
  11370.  
  11371.       Adding files of your own (such as a machine description for a machine we 
  11372.       don't support) is a modification of the compiler source. 
  11373.  
  11374.      Details of any other deviations from the standard procedure for 
  11375.       installing GNU CC. 
  11376.  
  11377.      A description of what behavior you observe that you believe is incorrect. 
  11378.       For example, ``The compiler gets a fatal signal,'' or, ``The assembler 
  11379.       instruction at line 208 in the output is incorrect.'' 
  11380.  
  11381.       Of course, if the bug is that the compiler gets a fatal signal, then one 
  11382.       can't miss it.  But if the bug is incorrect output, the maintainer might 
  11383.       not notice unless it is glaringly wrong.  None of us has time to study 
  11384.       all the assembler code from a 50-line C program just on the chance that 
  11385.       one instruction might be wrong.  We need you to do this part! 
  11386.  
  11387.       Even if the problem you experience is a fatal signal, you should still 
  11388.       say so explicitly.  Suppose something strange is going on, such as, your 
  11389.       copy of the compiler is out of synch, or you have encountered a bug in 
  11390.       the C library on your system.  (This has happened!)  Your copy might 
  11391.       crash and the copy here would not.  If you said to expect a crash, then 
  11392.       when the compiler here fails to crash, we would know that the bug was not 
  11393.       happening.  If you don't say to expect a crash, then we would not know 
  11394.       whether the bug was happening.  We would not be able to draw any 
  11395.       conclusion from our observations. 
  11396.  
  11397.       If the problem is a diagnostic when compiling GNU CC with some other 
  11398.       compiler, say whether it is a warning or an error. 
  11399.  
  11400.       Often the observed symptom is incorrect output when your program is run. 
  11401.       Sad to say, this is not enough information unless the program is short 
  11402.       and simple.  None of us has time to study a large program to figure out 
  11403.       how it would work if compiled correctly, much less which line of it was 
  11404.       compiled wrong.  So you will have to do that.  Tell us which source line 
  11405.       it is, and what incorrect result happens when that line is executed.  A 
  11406.       person who understands the program can find this as easily as finding a 
  11407.       bug in the program itself. 
  11408.  
  11409.      If you send examples of assembler code output from GNU CC or GNU C++, 
  11410.       please use `-g' when you make them.  The debugging information includes 
  11411.       source line numbers which are essential for correlating the output with 
  11412.       the input. 
  11413.  
  11414.      If you wish to mention something in the GNU CC source, refer to it by 
  11415.       context, not by line number. 
  11416.  
  11417.       The line numbers in the development sources don't match those in your 
  11418.       sources.  Your line numbers would convey no useful information to the 
  11419.       maintainers. 
  11420.  
  11421.      Additional information from a debugger might enable someone to find a 
  11422.       problem on a machine which he does not have available.  However, you need 
  11423.       to think when you collect this information if you want it to have any 
  11424.       chance of being useful. 
  11425.  
  11426.       For example, many people send just a backtrace, but that is never useful 
  11427.       by itself.  A simple backtrace with arguments conveys little about GNU CC 
  11428.       because the compiler is largely data-driven; the same functions are 
  11429.       called over and over for different RTL insns, doing different things 
  11430.       depending on the details of the insn. 
  11431.  
  11432.       Most of the arguments listed in the backtrace are useless because they 
  11433.       are pointers to RTL list structure.  The numeric values of the pointers, 
  11434.       which the debugger prints in the backtrace, have no significance 
  11435.       whatever; all that matters is the contents of the objects they point to 
  11436.       (and most of the contents are other such pointers). 
  11437.  
  11438.       In addition, most compiler passes consist of one or more loops that scan 
  11439.       the RTL insn sequence.  The most vital piece of information about such a 
  11440.       loop---which insn it has reached---is usually in a local variable, not in 
  11441.       an argument. 
  11442.  
  11443.       What you need to provide in addition to a backtrace are the values of the 
  11444.       local variables for several stack frames up.  When a local variable or an 
  11445.       argument is an RTX, first print its value and then use the GDB command pr 
  11446.       to print the RTL expression that it points to.  (If GDB doesn't run on 
  11447.       your machine, use your debugger to call the function debug_rtx with the 
  11448.       RTX as an argument.)  In general, whenever a variable is a pointer, its 
  11449.       value is no use without the data it points to. 
  11450.  
  11451.  Here are some things that are not necessary: 
  11452.  
  11453.      A description of the envelope of the bug. 
  11454.  
  11455.       Often people who encounter a bug spend a lot of time investigating which 
  11456.       changes to the input file will make the bug go away and which changes 
  11457.       will not affect it. 
  11458.  
  11459.       This is often time consuming and not very useful, because the way we will 
  11460.       find the bug is by running a single example under the debugger with 
  11461.       breakpoints, not by pure deduction from a series of examples.  You might 
  11462.       as well save your time for something else. 
  11463.  
  11464.       Of course, if you can find a simpler example to report instead of the 
  11465.       original one, that is a convenience.  Errors in the output will be easier 
  11466.       to spot, running under the debugger will take less time, etc. Most GNU CC 
  11467.       bugs involve just one function, so the most straightforward way to 
  11468.       simplify an example is to delete all the function definitions except the 
  11469.       one where the bug occurs.  Those earlier in the file may be replaced by 
  11470.       external declarations if the crucial function depends on them. 
  11471.       (Exception: inline functions may affect compilation of functions defined 
  11472.       later in the file.) 
  11473.  
  11474.       However, simplification is not vital; if you don't want to do this, 
  11475.       report the bug anyway and send the entire test case you used. 
  11476.  
  11477.      In particular, some people insert conditionals `#ifdef BUG' around a 
  11478.       statement which, if removed, makes the bug not happen.  These are just 
  11479.       clutter; we won't pay any attention to them anyway.  Besides, you should 
  11480.       send us cpp output, and that can't have conditionals. 
  11481.  
  11482.      A patch for the bug. 
  11483.  
  11484.       A patch for the bug is useful if it is a good one.  But don't omit the 
  11485.       necessary information, such as the test case, on the assumption that a 
  11486.       patch is all we need.  We might see problems with your patch and decide 
  11487.       to fix the problem another way, or we might not understand it at all. 
  11488.  
  11489.       Sometimes with a program as complicated as GNU CC it is very hard to 
  11490.       construct an example that will make the program follow a certain path 
  11491.       through the code.  If you don't send the example, we won't be able to 
  11492.       construct one, so we won't be able to verify that the bug is fixed. 
  11493.  
  11494.       And if we can't understand what bug you are trying to fix, or why your 
  11495.       patch should be an improvement, we won't install it.  A test case will 
  11496.       help us to understand. 
  11497.  
  11498.       See Sending Patches, for guidelines on how to make it easy for us to 
  11499.       understand and install your patches. 
  11500.  
  11501.      A guess about what the bug is or what it depends on. 
  11502.  
  11503.       Such guesses are usually wrong.  Even I can't guess right about such 
  11504.       things without first using the debugger to find the facts. 
  11505.  
  11506.      A core dump file. 
  11507.  
  11508.       We have no way of examining a core dump for your type of machine unless 
  11509.       we have an identical system---and if we do have one, we should be able to 
  11510.       reproduce the crash ourselves. 
  11511.  
  11512.  
  11513. ΓòÉΓòÉΓòÉ 13.4. Sending Patches for GNU CC ΓòÉΓòÉΓòÉ
  11514.  
  11515. If you would like to write bug fixes or improvements for the GNU C compiler, 
  11516. that is very helpful.  Send suggested fixes to the bug report mailing list, 
  11517. bug-gcc@prep.ai.mit.edu. 
  11518.  
  11519. Please follow these guidelines so we can study your patches efficiently. If you 
  11520. don't follow these guidelines, your information might still be useful, but 
  11521. using it will take extra work.  Maintaining GNU C is a lot of work in the best 
  11522. of circumstances, and we can't keep up unless you do your best to help. 
  11523.  
  11524.      Send an explanation with your changes of what problem they fix or what 
  11525.       improvement they bring about.  For a bug fix, just include a copy of the 
  11526.       bug report, and explain why the change fixes the bug. 
  11527.  
  11528.       (Referring to a bug report is not as good as including it, because then 
  11529.       we will have to look it up, and we have probably already deleted it if 
  11530.       we've already fixed the bug.) 
  11531.  
  11532.      Always include a proper bug report for the problem you think you have 
  11533.       fixed.  We need to convince ourselves that the change is right before 
  11534.       installing it.  Even if it is right, we might have trouble judging it if 
  11535.       we don't have a way to reproduce the problem. 
  11536.  
  11537.      Include all the comments that are appropriate to help people reading the 
  11538.       source in the future understand why this change was needed. 
  11539.  
  11540.      Don't mix together changes made for different reasons. Send them 
  11541.       individually. 
  11542.  
  11543.       If you make two changes for separate reasons, then we might not want to 
  11544.       install them both.  We might want to install just one.  If you send them 
  11545.       all jumbled together in a single set of diffs, we have to do extra work 
  11546.       to disentangle them---to figure out which parts of the change serve which 
  11547.       purpose.  If we don't have time for this, we might have to ignore your 
  11548.       changes entirely. 
  11549.  
  11550.       If you send each change as soon as you have written it, with its own 
  11551.       explanation, then the two changes never get tangled up, and we can 
  11552.       consider each one properly without any extra work to disentangle them. 
  11553.  
  11554.       Ideally, each change you send should be impossible to subdivide into 
  11555.       parts that we might want to consider separately, because each of its 
  11556.       parts gets its motivation from the other parts. 
  11557.  
  11558.      Send each change as soon as that change is finished.  Sometimes people 
  11559.       think they are helping us by accumulating many changes to send them all 
  11560.       together.  As explained above, this is absolutely the worst thing you 
  11561.       could do. 
  11562.  
  11563.       Since you should send each change separately, you might as well send it 
  11564.       right away.  That gives us the option of installing it immediately if it 
  11565.       is important. 
  11566.  
  11567.      Use `diff -c' to make your diffs.  Diffs without context are hard for us 
  11568.       to install reliably.  More than that, they make it hard for us to study 
  11569.       the diffs to decide whether we want to install them.  Unidiff format is 
  11570.       better than contextless diffs, but not as easy to read as `-c' format. 
  11571.  
  11572.       If you have GNU diff, use `diff -cp', which shows the name of the 
  11573.       function that each change occurs in. 
  11574.  
  11575.      Write the change log entries for your changes.  We get lots of changes, 
  11576.       and we don't have time to do all the change log writing ourselves. 
  11577.  
  11578.       Read the `ChangeLog' file to see what sorts of information to put in, and 
  11579.       to learn the style that we use.  The purpose of the change log is to show 
  11580.       people where to find what was changed.  So you need to be specific about 
  11581.       what functions you changed; in large functions, it's often helpful to 
  11582.       indicate where within the function the change was. 
  11583.  
  11584.       On the other hand, once you have shown people where to find the change, 
  11585.       you need not explain its purpose.  Thus, if you add a new function, all 
  11586.       you need to say about it is that it is new.  If you feel that the purpose 
  11587.       needs explaining, it probably does---but the explanation will be much 
  11588.       more useful if you put it in comments in the code. 
  11589.  
  11590.       If you would like your name to appear in the header line for who made the 
  11591.       change, send us the header line. 
  11592.  
  11593.      When you write the fix, keep in mind that we can't install a change that 
  11594.       would break other systems. 
  11595.  
  11596.       People often suggest fixing a problem by changing machine-independent 
  11597.       files such as `toplev.c' to do something special that a particular system 
  11598.       needs.  Sometimes it is totally obvious that such changes would break GNU 
  11599.       CC for almost all users.  We can't possibly make a change like that.  At 
  11600.       best it might tell us how to write another patch that would solve the 
  11601.       problem acceptably. 
  11602.  
  11603.       Sometimes people send fixes that might be an improvement in general---but 
  11604.       it is hard to be sure of this.  It's hard to install such changes because 
  11605.       we have to study them very carefully.  Of course, a good explanation of 
  11606.       the reasoning by which you concluded the change was correct can help 
  11607.       convince us. 
  11608.  
  11609.       The safest changes are changes to the configuration files for a 
  11610.       particular machine.  These are safe because they can't create new bugs on 
  11611.       other machines. 
  11612.  
  11613.       Please help us keep up with the workload by designing the patch in a form 
  11614.       that is good to install. 
  11615.  
  11616.  
  11617. ΓòÉΓòÉΓòÉ 14. How To Get Help with GNU CC ΓòÉΓòÉΓòÉ
  11618.  
  11619. If you need help installing, using or changing GNU CC, there are two ways to 
  11620. find it: 
  11621.  
  11622.      Send a message to a suitable network mailing list.  First try 
  11623.       bug-gcc@prep.ai.mit.edu, and if that brings no response, try 
  11624.       help-gcc@prep.ai.mit.edu. 
  11625.  
  11626.      Look in the service directory for someone who might help you for a fee. 
  11627.       The service directory is found in the file named `SERVICE' in the GNU CC 
  11628.       distribution. 
  11629.  
  11630.  
  11631. ΓòÉΓòÉΓòÉ 15. Using GNU CC on VMS ΓòÉΓòÉΓòÉ
  11632.  
  11633. Here is how to use GNU CC on VMS. 
  11634.  
  11635.  Include Files and VMS                   Where the preprocessor looks for the 
  11636.                                          include files. 
  11637.  Global Declarations                     How to do globaldef, globalref and 
  11638.                                          globalvalue with GNU CC. 
  11639.  VMS Misc                                Misc information. 
  11640.  
  11641.  
  11642. ΓòÉΓòÉΓòÉ 15.1. Include Files and VMS ΓòÉΓòÉΓòÉ
  11643.  
  11644. Due to the differences between the filesystems of Unix and VMS, GNU CC attempts 
  11645. to translate file names in `#include' into names that VMS will understand.  The 
  11646. basic strategy is to prepend a prefix to the specification of the include file, 
  11647. convert the whole filename to a VMS filename, and then try to open the file. 
  11648. GNU CC tries various prefixes one by one until one of them succeeds: 
  11649.  
  11650.    1. The first prefix is the `GNU_CC_INCLUDE:' logical name: this is where GNU 
  11651.       C header files are traditionally stored.  If you wish to store header 
  11652.       files in non-standard locations, then you can assign the logical 
  11653.       `GNU_CC_INCLUDE' to be a search list, where each element of the list is 
  11654.       suitable for use with a rooted logical. 
  11655.  
  11656.    2. The next prefix tried is `SYS$SYSROOT:[SYSLIB.]'.  This is where VAX-C 
  11657.       header files are traditionally stored. 
  11658.  
  11659.    3. If the include file specification by itself is a valid VMS filename, the 
  11660.       preprocessor then uses this name with no prefix in an attempt to open the 
  11661.       include file. 
  11662.  
  11663.    4. If the file specification is not a valid VMS filename (i.e. does not 
  11664.       contain a device or a directory specifier, and contains a `/' character), 
  11665.       the preprocessor tries to convert it from Unix syntax to VMS syntax. 
  11666.  
  11667.       Conversion works like this: the first directory name becomes a device, 
  11668.       and the rest of the directories are converted into VMS-format directory 
  11669.       names.  For example, the name `X11/foobar.h' is translated to 
  11670.       `X11:[000000]foobar.h' or `X11:foobar.h', whichever one can be opened. 
  11671.       This strategy allows you to assign a logical name to point to the actual 
  11672.       location of the header files. 
  11673.  
  11674.    5. If none of these strategies succeeds, the `#include' fails. 
  11675.  
  11676.  Include directives of the form: 
  11677.  
  11678.   #include foobar
  11679.  
  11680.  are a common source of incompatibility between VAX-C and GNU CC.  VAX-C treats 
  11681.  this much like a standard #include <foobar.h> directive. That is incompatible 
  11682.  with the ANSI C behavior implemented by GNU CC: to expand the name foobar as a 
  11683.  macro.  Macro expansion should eventually yield one of the two standard 
  11684.  formats for #include: 
  11685.  
  11686.   #include "file"
  11687.   #include <file>
  11688.  
  11689.  If you have this problem, the best solution is to modify the source to convert 
  11690.  the #include directives to one of the two standard forms. That will work with 
  11691.  either compiler.  If you want a quick and dirty fix, define the file names as 
  11692.  macros with the proper expansion, like this: 
  11693.  
  11694.   #define stdio <stdio.h>
  11695.  
  11696.  This will work, as long as the name doesn't conflict with anything else in the 
  11697.  program. 
  11698.  
  11699.  Another source of incompatibility is that VAX-C assumes that: 
  11700.  
  11701.   #include "foobar"
  11702.  
  11703.  is actually asking for the file `foobar.h'.  GNU CC does not make this 
  11704.  assumption, and instead takes what you ask for literally; it tries to read the 
  11705.  file `foobar'.  The best way to avoid this problem is to always specify the 
  11706.  desired file extension in your include directives. 
  11707.  
  11708.  GNU CC for VMS is distributed with a set of include files that is sufficient 
  11709.  to compile most general purpose programs.  Even though the GNU CC distribution 
  11710.  does not contain header files to define constants and structures for some VMS 
  11711.  system-specific functions, there is no reason why you cannot use GNU CC with 
  11712.  any of these functions.  You first may have to generate or create header 
  11713.  files, either by using the public domain utility UNSDL (which can be found on 
  11714.  a DECUS tape), or by extracting the relevant modules from one of the system 
  11715.  macro libraries, and using an editor to construct a C header file. 
  11716.  
  11717.  A #include file name cannot contain a DECNET node name.  The preprocessor 
  11718.  reports an I/O error if you attempt to use a node name, whether explicitly, or 
  11719.  implicitly via a logical name. 
  11720.  
  11721.  
  11722. ΓòÉΓòÉΓòÉ 15.2. Global Declarations and VMS ΓòÉΓòÉΓòÉ
  11723.  
  11724. GNU CC does not provide the globalref, globaldef and globalvalue keywords of 
  11725. VAX-C.  You can get the same effect with an obscure feature of GAS, the GNU 
  11726. assembler.  (This requires GAS version 1.39 or later.)  The following macros 
  11727. allow you to use this feature in a fairly natural way: 
  11728.  
  11729. #ifdef __GNUC__
  11730. #define GLOBALREF(TYPE,NAME)                      \
  11731.   TYPE NAME                                       \
  11732.   asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME)
  11733. #define GLOBALDEF(TYPE,NAME,VALUE)                \
  11734.   TYPE NAME                                       \
  11735.   asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME) \
  11736.     = VALUE
  11737. #define GLOBALVALUEREF(TYPE,NAME)                 \
  11738.   const TYPE NAME[1]                              \
  11739.   asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)
  11740. #define GLOBALVALUEDEF(TYPE,NAME,VALUE)           \
  11741.   const TYPE NAME[1]                              \
  11742.   asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)  \
  11743.     = {VALUE}
  11744. #else
  11745. #define GLOBALREF(TYPE,NAME) \
  11746.   globalref TYPE NAME
  11747. #define GLOBALDEF(TYPE,NAME,VALUE) \
  11748.   globaldef TYPE NAME = VALUE
  11749. #define GLOBALVALUEDEF(TYPE,NAME,VALUE) \
  11750.   globalvalue TYPE NAME = VALUE
  11751. #define GLOBALVALUEREF(TYPE,NAME) \
  11752.   globalvalue TYPE NAME
  11753. #endif
  11754.  
  11755. (The _$$PsectAttributes_GLOBALSYMBOL prefix at the start of the name is removed 
  11756. by the assembler, after it has modified the attributes of the symbol).  These 
  11757. macros are provided in the VMS binaries distribution in a header file 
  11758. `GNU_HACKS.H'.  An example of the usage is: 
  11759.  
  11760. GLOBALREF (int, ijk);
  11761. GLOBALDEF (int, jkl, 0);
  11762.  
  11763. The macros GLOBALREF and GLOBALDEF cannot be used straightforwardly for arrays, 
  11764. since there is no way to insert the array dimension into the declaration at the 
  11765. right place.  However, you can declare an array with these macros if you first 
  11766. define a typedef for the array type, like this: 
  11767.  
  11768. typedef int intvector[10];
  11769. GLOBALREF (intvector, foo);
  11770.  
  11771. Array and structure initializers will also break the macros; you can define the 
  11772. initializer to be a macro of its own, or you can expand the GLOBALDEF macro by 
  11773. hand.  You may find a case where you wish to use the GLOBALDEF macro with a 
  11774. large array, but you are not interested in explicitly initializing each element 
  11775. of the array.  In such cases you can use an initializer like: {0,}, which will 
  11776. initialize the entire array to 0. 
  11777.  
  11778. A shortcoming of this implementation is that a variable declared with 
  11779. GLOBALVALUEREF or GLOBALVALUEDEF is always an array.  For example, the 
  11780. declaration: 
  11781.  
  11782. GLOBALVALUEREF(int, ijk);
  11783.  
  11784. declares the variable ijk as an array of type int [1]. This is done because a 
  11785. globalvalue is actually a constant; its ``value'' is what the linker would 
  11786. normally consider an address.  That is not how an integer value works in C, but 
  11787. it is how an array works.  So treating the symbol as an array name gives 
  11788. consistent results---with the exception that the value seems to have the wrong 
  11789. type.  *Don't try to access an element of the array.*  It doesn't have any 
  11790. elements. The array ``address'' may not be the address of actual storage. 
  11791.  
  11792. The fact that the symbol is an array may lead to warnings where the variable is 
  11793. used.  Insert type casts to avoid the warnings.  Here is an example; it takes 
  11794. advantage of the ANSI C feature allowing macros that expand to use the same 
  11795. name as the macro itself. 
  11796.  
  11797. GLOBALVALUEREF (int, ss$_normal);
  11798. GLOBALVALUEDEF (int, xyzzy,123);
  11799. #ifdef __GNUC__
  11800. #define ss$_normal ((int) ss$_normal)
  11801. #define xyzzy ((int) xyzzy)
  11802. #endif
  11803.  
  11804. Don't use globaldef or globalref with a variable whose type is an enumeration 
  11805. type; this is not implemented.  Instead, make the variable an integer, and use 
  11806. a globalvaluedef for each of the enumeration values.  An example of this would 
  11807. be: 
  11808.  
  11809. #ifdef __GNUC__
  11810. GLOBALDEF (int, color, 0);
  11811. GLOBALVALUEDEF (int, RED, 0);
  11812. GLOBALVALUEDEF (int, BLUE, 1);
  11813. GLOBALVALUEDEF (int, GREEN, 3);
  11814. #else
  11815. enum globaldef color {RED, BLUE, GREEN = 3};
  11816. #endif
  11817.  
  11818.  
  11819. ΓòÉΓòÉΓòÉ 15.3. Other VMS Issues ΓòÉΓòÉΓòÉ
  11820.  
  11821. GNU CC automatically arranges for main to return 1 by default if you fail to 
  11822. specify an explicit return value.  This will be interpreted by VMS as a status 
  11823. code indicating a normal successful completion. Version 1 of GNU CC did not 
  11824. provide this default. 
  11825.  
  11826. GNU CC on VMS works only with the GNU assembler, GAS.  You need version 1.37 or 
  11827. later of GAS in order to produce value debugging information for the VMS 
  11828. debugger.  Use the ordinary VMS linker with the object files produced by GAS. 
  11829.  
  11830. Under previous versions of GNU CC, the generated code would occasionally give 
  11831. strange results when linked to the sharable `VAXCRTL' library. Now this should 
  11832. work. 
  11833.  
  11834. A caveat for use of const global variables: the const modifier must be 
  11835. specified in every external declaration of the variable in all of the source 
  11836. files that use that variable.  Otherwise the linker will issue warnings about 
  11837. conflicting attributes for the variable.  Your program will still work despite 
  11838. the warnings, but the variable will be placed in writable storage. 
  11839.  
  11840. Although the VMS linker does distinguish between upper and lower case letters 
  11841. in global symbols, most VMS compilers convert all such symbols into upper case 
  11842. and most run-time library routines also have upper case names.  To be able to 
  11843. reliably call such routines, GNU CC (by means of the assembler GAS) converts 
  11844. global symbols into upper case like other VMS compilers.  However, since the 
  11845. usual practice in C is to distinguish case, GNU CC (via GAS) tries to preserve 
  11846. usual C behavior by augmenting each name that is not all lower case.  This 
  11847. means truncating the name to at most 23 characters and then adding more 
  11848. characters at the end which encode the case pattern of those 23.  Names which 
  11849. contain at least one dollar sign are an exception; they are converted directly 
  11850. into upper case without augmentation. 
  11851.  
  11852. Name augmentation yields bad results for programs that use precompiled 
  11853. libraries (such as Xlib) which were generated by another compiler.  You can use 
  11854. the compiler option `/NOCASE_HACK' to inhibit augmentation; it makes external C 
  11855. functions and variables case-independent as is usual on VMS.  Alternatively, 
  11856. you could write all references to the functions and variables in such libraries 
  11857. using lower case; this will work on VMS, but is not portable to other systems. 
  11858. The compiler option `/NAMES' also provides control over global name handling. 
  11859.  
  11860. Function and variable names are handled somewhat differently with GNU C++.  The 
  11861. GNU C++ compiler performs name mangling on function names, which means that it 
  11862. adds information to the function name to describe the data types of the 
  11863. arguments that the function takes.  One result of this is that the name of a 
  11864. function can become very long. Since the VMS linker only recognizes the first 
  11865. 31 characters in a name, special action is taken to ensure that each function 
  11866. and variable has a unique name that can be represented in 31 characters. 
  11867.  
  11868. If the name (plus a name augmentation, if required) is less than 32 characters 
  11869. in length, then no special action is performed.  If the name is longer than 31 
  11870. characters, the assembler (GAS) will generate a hash string based upon the 
  11871. function name, truncate the function name to 23 characters, and append the hash 
  11872. string to the truncated name.  If the `/VERBOSE' compiler option is used, the 
  11873. assembler will print both the full and truncated names of each symbol that is 
  11874. truncated. 
  11875.  
  11876. The `/NOCASE_HACK' compiler option should not be used when you are compiling 
  11877. programs that use libg++.  libg++ has several instances of objects (i.e. 
  11878. Filebuf and filebuf) which become indistinguishable in a case-insensitive 
  11879. environment.  This leads to cases where you need to inhibit augmentation 
  11880. selectively (if you were using libg++ and Xlib in the same program, for 
  11881. example).  There is no special feature for doing this, but you can get the 
  11882. result by defining a macro for each mixed case symbol for which you wish to 
  11883. inhibit augmentation.  The macro should expand into the lower case equivalent 
  11884. of itself.  For example: 
  11885.  
  11886. #define StuDlyCapS studlycaps
  11887.  
  11888. These macro definitions can be placed in a header file to minimize the number 
  11889. of changes to your source code. 
  11890.  
  11891.  
  11892. ΓòÉΓòÉΓòÉ 16. GNU CC and Portability ΓòÉΓòÉΓòÉ
  11893.  
  11894. The main goal of GNU CC was to make a good, fast compiler for machines in the 
  11895. class that the GNU system aims to run on: 32-bit machines that address 8-bit 
  11896. bytes and have several general registers.  Elegance, theoretical power and 
  11897. simplicity are only secondary. 
  11898.  
  11899. GNU CC gets most of the information about the target machine from a machine 
  11900. description which gives an algebraic formula for each of the machine's 
  11901. instructions.  This is a very clean way to describe the target.  But when the 
  11902. compiler needs information that is difficult to express in this fashion, I have 
  11903. not hesitated to define an ad-hoc parameter to the machine description.  The 
  11904. purpose of portability is to reduce the total work needed on the compiler; it 
  11905. was not of interest for its own sake. 
  11906.  
  11907. GNU CC does not contain machine dependent code, but it does contain code that 
  11908. depends on machine parameters such as endianness (whether the most significant 
  11909. byte has the highest or lowest address of the bytes in a word) and the 
  11910. availability of autoincrement addressing.  In the RTL-generation pass, it is 
  11911. often necessary to have multiple strategies for generating code for a 
  11912. particular kind of syntax tree, strategies that are usable for different 
  11913. combinations of parameters.  Often I have not tried to address all possible 
  11914. cases, but only the common ones or only the ones that I have encountered. As a 
  11915. result, a new target may require additional strategies.  You will know if this 
  11916. happens because the compiler will call abort.  Fortunately, the new strategies 
  11917. can be added in a machine-independent fashion, and will affect only the target 
  11918. machines that need them. 
  11919.  
  11920.  
  11921. ΓòÉΓòÉΓòÉ 17. Interfacing to GNU CC Output ΓòÉΓòÉΓòÉ
  11922.  
  11923. GNU CC is normally configured to use the same function calling convention 
  11924. normally in use on the target system.  This is done with the 
  11925. machine-description macros described (see Target Macros). 
  11926.  
  11927. However, returning of structure and union values is done differently on some 
  11928. target machines.  As a result, functions compiled with PCC returning such types 
  11929. cannot be called from code compiled with GNU CC, and vice versa.  This does not 
  11930. cause trouble often because few Unix library routines return structures or 
  11931. unions. 
  11932.  
  11933. GNU CC code returns structures and unions that are 1, 2, 4 or 8 bytes long in 
  11934. the same registers used for int or double return values.  (GNU CC typically 
  11935. allocates variables of such types in registers also.)  Structures and unions of 
  11936. other sizes are returned by storing them into an address passed by the caller 
  11937. (usually in a register).  The machine-description macros STRUCT_VALUE and 
  11938. STRUCT_INCOMING_VALUE tell GNU CC where to pass this address. 
  11939.  
  11940. By contrast, PCC on most target machines returns structures and unions of any 
  11941. size by copying the data into an area of static storage, and then returning the 
  11942. address of that storage as if it were a pointer value. The caller must copy the 
  11943. data from that memory area to the place where the value is wanted.  This is 
  11944. slower than the method used by GNU CC, and fails to be reentrant. 
  11945.  
  11946. On some target machines, such as RISC machines and the 80386, the standard 
  11947. system convention is to pass to the subroutine the address of where to return 
  11948. the value.  On these machines, GNU CC has been configured to be compatible with 
  11949. the standard compiler, when this method is used.  It may not be compatible for 
  11950. structures of 1, 2, 4 or 8 bytes. 
  11951.  
  11952. GNU CC uses the system's standard convention for passing arguments.  On some 
  11953. machines, the first few arguments are passed in registers; in others, all are 
  11954. passed on the stack.  It would be possible to use registers for argument 
  11955. passing on any machine, and this would probably result in a significant 
  11956. speedup.  But the result would be complete incompatibility with code that 
  11957. follows the standard convention.  So this change is practical only if you are 
  11958. switching to GNU CC as the sole C compiler for the system.  We may implement 
  11959. register argument passing on certain machines once we have a complete GNU 
  11960. system so that we can compile the libraries with GNU CC. 
  11961.  
  11962. On some machines (particularly the Sparc), certain types of arguments are 
  11963. passed ``by invisible reference''.  This means that the value is stored in 
  11964. memory, and the address of the memory location is passed to the subroutine. 
  11965.  
  11966. If you use longjmp, beware of automatic variables.  ANSI C says that automatic 
  11967. variables that are not declared volatile have undefined values after a longjmp. 
  11968. And this is all GNU CC promises to do, because it is very difficult to restore 
  11969. register variables correctly, and one of GNU CC's features is that it can put 
  11970. variables in registers without your asking it to. 
  11971.  
  11972. If you want a variable to be unaltered by longjmp, and you don't want to write 
  11973. volatile because old C compilers don't accept it, just take the address of the 
  11974. variable.  If a variable's address is ever taken, even if just to compute it 
  11975. and ignore it, then the variable cannot go in a register: 
  11976.  
  11977. {
  11978.   int careful;
  11979.   &careful;
  11980.   ...
  11981. }
  11982.  
  11983. Code compiled with GNU CC may call certain library routines.  Most of them 
  11984. handle arithmetic for which there are no instructions.  This includes multiply 
  11985. and divide on some machines, and floating point operations on any machine for 
  11986. which floating point support is disabled with `-msoft-float'.  Some standard 
  11987. parts of the C library, such as bcopy or memcpy, are also called automatically. 
  11988. The usual function call interface is used for calling the library routines. 
  11989.  
  11990. These library routines should be defined in the library `libgcc.a', which GNU 
  11991. CC automatically searches whenever it links a program.  On machines that have 
  11992. multiply and divide instructions, if hardware floating point is in use, 
  11993. normally `libgcc.a' is not needed, but it is searched just in case. 
  11994.  
  11995. Each arithmetic function is defined in `libgcc1.c' to use the corresponding C 
  11996. arithmetic operator.  As long as the file is compiled with another C compiler, 
  11997. which supports all the C arithmetic operators, this file will work portably. 
  11998. However, `libgcc1.c' does not work if compiled with GNU CC, because each 
  11999. arithmetic function would compile into a call to itself! 
  12000.  
  12001.  
  12002. ΓòÉΓòÉΓòÉ 18. Passes and Files of the Compiler ΓòÉΓòÉΓòÉ
  12003.  
  12004. The overall control structure of the compiler is in `toplev.c'.  This file is 
  12005. responsible for initialization, decoding arguments, opening and closing files, 
  12006. and sequencing the passes. 
  12007.  
  12008. The parsing pass is invoked only once, to parse the entire input.  The RTL 
  12009. intermediate code for a function is generated as the function is parsed, a 
  12010. statement at a time.  Each statement is read in as a syntax tree and then 
  12011. converted to RTL; then the storage for the tree for the statement is reclaimed. 
  12012. Storage for types (and the expressions for their sizes), declarations, and a 
  12013. representation of the binding contours and how they nest, remain until the 
  12014. function is finished being compiled; these are all needed to output the 
  12015. debugging information. 
  12016.  
  12017. Each time the parsing pass reads a complete function definition or top-level 
  12018. declaration, it calls either the function rest_of_compilation, or the function 
  12019. rest_of_decl_compilation in `toplev.c', which are responsible for all further 
  12020. processing necessary, ending with output of the assembler language.  All other 
  12021. compiler passes run, in sequence, within rest_of_compilation.  When that 
  12022. function returns from compiling a function definition, the storage used for 
  12023. that function definition's compilation is entirely freed, unless it is an 
  12024. inline function (see An Inline Function is As Fast As a Macro). 
  12025.  
  12026. Here is a list of all the passes of the compiler and their source files. Also 
  12027. included is a description of where debugging dumps can be requested with `-d' 
  12028. options. 
  12029.  
  12030.      Parsing.  This pass reads the entire text of a function definition, 
  12031.       constructing partial syntax trees.  This and RTL generation are no longer 
  12032.       truly separate passes (formerly they were), but it is easier to think of 
  12033.       them as separate. 
  12034.  
  12035.       The tree representation does not entirely follow C syntax, because it is 
  12036.       intended to support other languages as well. 
  12037.  
  12038.       Language-specific data type analysis is also done in this pass, and every 
  12039.       tree node that represents an expression has a data type attached. 
  12040.       Variables are represented as declaration nodes. 
  12041.  
  12042.       Constant folding and some arithmetic simplifications are also done during 
  12043.       this pass. 
  12044.  
  12045.       The language-independent source files for parsing are `stor-layout.c', 
  12046.       `fold-const.c', and `tree.c'. There are also header files `tree.h' and 
  12047.       `tree.def' which define the format of the tree representation. 
  12048.  
  12049.       The source files to parse C are `c-parse.in', `c-decl.c', `c-typeck.c', 
  12050.       `c-aux-info.c', `c-convert.c', and `c-lang.c' along with header files 
  12051.       `c-lex.h', and `c-tree.h'. 
  12052.  
  12053.       The source files for parsing C++ are `cp-parse.y', `cp-class.c', 
  12054.       `cp-cvt.c', `cp-decl.c', `cp-decl2.c', `cp-dem.c', `cp-except.c', 
  12055.       `cp-expr.c', `cp-init.c', `cp-lex.c', `cp-method.c', `cp-ptree.c', 
  12056.       `cp-search.c', `cp-tree.c', `cp-type2.c', and `cp-typeck.c', along with 
  12057.       header files `cp-tree.def', `cp-tree.h', and `cp-decl.h'. 
  12058.  
  12059.       The special source files for parsing Objective C are `objc-parse.y', 
  12060.       `objc-actions.c', `objc-tree.def', and `objc-actions.h'.  Certain 
  12061.       C-specific files are used for this as well. 
  12062.  
  12063.       The file `c-common.c' is also used for all of the above languages. 
  12064.  
  12065.      RTL generation.  This is the conversion of syntax tree into RTL code. It 
  12066.       is actually done statement-by-statement during parsing, but for most 
  12067.       purposes it can be thought of as a separate pass. 
  12068.  
  12069.       This is where the bulk of target-parameter-dependent code is found, since 
  12070.       often it is necessary for strategies to apply only when certain standard 
  12071.       kinds of instructions are available.  The purpose of named instruction 
  12072.       patterns is to provide this information to the RTL generation pass. 
  12073.  
  12074.       Optimization is done in this pass for if-conditions that are comparisons, 
  12075.       boolean operations or conditional expressions.  Tail recursion is 
  12076.       detected at this time also.  Decisions are made about how best to arrange 
  12077.       loops and how to output switch statements. 
  12078.  
  12079.       The source files for RTL generation include `stmt.c', `calls.c', 
  12080.       `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and 
  12081.       `emit-rtl.c'. Also, the file `insn-emit.c', generated from the machine 
  12082.       description by the program genemit, is used in this pass.  The header 
  12083.       file `expr.h' is used for communication within this pass. 
  12084.  
  12085.       The header files `insn-flags.h' and `insn-codes.h', generated from the 
  12086.       machine description by the programs genflags and gencodes, tell this pass 
  12087.       which standard names are available for use and which patterns correspond 
  12088.       to them. 
  12089.  
  12090.       Aside from debugging information output, none of the following passes 
  12091.       refers to the tree structure representation of the function (only part of 
  12092.       which is saved). 
  12093.  
  12094.       The decision of whether the function can and should be expanded inline in 
  12095.       its subsequent callers is made at the end of rtl generation.  The 
  12096.       function must meet certain criteria, currently related to the size of the 
  12097.       function and the types and number of parameters it has.  Note that this 
  12098.       function may contain loops, recursive calls to itself (tail-recursive 
  12099.       functions can be inlined!), gotos, in short, all constructs supported by 
  12100.       GNU CC.  The file `integrate.c' contains the code to save a function's 
  12101.       rtl for later inlining and to inline that rtl when the function is 
  12102.       called.  The header file `integrate.h' is also used for this purpose. 
  12103.  
  12104.       The option `-dr' causes a debugging dump of the RTL code after this pass. 
  12105.       This dump file's name is made by appending `.rtl' to the input file name. 
  12106.  
  12107.      Jump optimization.  This pass simplifies jumps to the following 
  12108.       instruction, jumps across jumps, and jumps to jumps.  It deletes 
  12109.       unreferenced labels and unreachable code, except that unreachable code 
  12110.       that contains a loop is not recognized as unreachable in this pass. (Such 
  12111.       loops are deleted later in the basic block analysis.)  It also converts 
  12112.       some code originally written with jumps into sequences of instructions 
  12113.       that directly set values from the results of comparisons, if the machine 
  12114.       has such instructions. 
  12115.  
  12116.       Jump optimization is performed two or three times.  The first time is 
  12117.       immediately following RTL generation.  The second time is after CSE, but 
  12118.       only if CSE says repeated jump optimization is needed.  The last time is 
  12119.       right before the final pass.  That time, cross-jumping and deletion of 
  12120.       no-op move instructions are done together with the optimizations 
  12121.       described above. 
  12122.  
  12123.       The source file of this pass is `jump.c'. 
  12124.  
  12125.       The option `-dj' causes a debugging dump of the RTL code after this pass 
  12126.       is run for the first time.  This dump file's name is made by appending 
  12127.       `.jump' to the input file name. 
  12128.  
  12129.      Register scan.  This pass finds the first and last use of each register, 
  12130.       as a guide for common subexpression elimination.  Its source is in 
  12131.       `regclass.c'. 
  12132.  
  12133.      Jump threading.  This pass detects a condition jump that branches to an 
  12134.       identical or inverse test.  Such jumps can be `threaded' through the 
  12135.       second conditional test.  The source code for this pass is in `jump.c'. 
  12136.       This optimization is only performed if `-fthread-jumps' is enabled. 
  12137.  
  12138.      Common subexpression elimination.  This pass also does constant 
  12139.       propagation.  Its source file is `cse.c'.  If constant propagation causes 
  12140.       conditional jumps to become unconditional or to become no-ops, jump 
  12141.       optimization is run again when CSE is finished. 
  12142.  
  12143.       The option `-ds' causes a debugging dump of the RTL code after this pass. 
  12144.       This dump file's name is made by appending `.cse' to the input file name. 
  12145.  
  12146.      Loop optimization.  This pass moves constant expressions out of loops, 
  12147.       and optionally does strength-reduction and loop unrolling as well. Its 
  12148.       source files are `loop.c' and `unroll.c', plus the header `loop.h' used 
  12149.       for communication between them.  Loop unrolling uses some functions in 
  12150.       `integrate.c' and the header `integrate.h'. 
  12151.  
  12152.       The option `-dL' causes a debugging dump of the RTL code after this pass. 
  12153.       This dump file's name is made by appending `.loop' to the input file 
  12154.       name. 
  12155.  
  12156.      If `-frerun-cse-after-loop' was enabled, a second common subexpression 
  12157.       elimination pass is performed after the loop optimization pass.  Jump 
  12158.       threading is also done again at this time if it was specified. 
  12159.  
  12160.       The option `-dt' causes a debugging dump of the RTL code after this pass. 
  12161.       This dump file's name is made by appending `.cse2' to the input file 
  12162.       name. 
  12163.  
  12164.      Stupid register allocation is performed at this point in a nonoptimizing 
  12165.       compilation.  It does a little data flow analysis as well.  When stupid 
  12166.       register allocation is in use, the next pass executed is the reloading 
  12167.       pass; the others in between are skipped. The source file is `stupid.c'. 
  12168.  
  12169.      Data flow analysis (`flow.c').  This pass divides the program into basic 
  12170.       blocks (and in the process deletes unreachable loops); then it computes 
  12171.       which pseudo-registers are live at each point in the program, and makes 
  12172.       the first instruction that uses a value point at the instruction that 
  12173.       computed the value. 
  12174.  
  12175.       This pass also deletes computations whose results are never used, and 
  12176.       combines memory references with add or subtract instructions to make 
  12177.       autoincrement or autodecrement addressing. 
  12178.  
  12179.       The option `-df' causes a debugging dump of the RTL code after this pass. 
  12180.       This dump file's name is made by appending `.flow' to the input file 
  12181.       name.  If stupid register allocation is in use, this dump file reflects 
  12182.       the full results of such allocation. 
  12183.  
  12184.      Instruction combination (`combine.c').  This pass attempts to combine 
  12185.       groups of two or three instructions that are related by data flow into 
  12186.       single instructions.  It combines the RTL expressions for the 
  12187.       instructions by substitution, simplifies the result using algebra, and 
  12188.       then attempts to match the result against the machine description. 
  12189.  
  12190.       The option `-dc' causes a debugging dump of the RTL code after this pass. 
  12191.       This dump file's name is made by appending `.combine' to the input file 
  12192.       name. 
  12193.  
  12194.      Instruction scheduling (`sched.c').  This pass looks for instructions 
  12195.       whose output will not be available by the time that it is used in 
  12196.       subsequent instructions.  (Memory loads and floating point instructions 
  12197.       often have this behavior on RISC machines).  It re-orders instructions 
  12198.       within a basic block to try to separate the definition and use of items 
  12199.       that otherwise would cause pipeline stalls. 
  12200.  
  12201.       Instruction scheduling is performed twice.  The first time is immediately 
  12202.       after instruction combination and the second is immediately after reload. 
  12203.  
  12204.       The option `-dS' causes a debugging dump of the RTL code after this pass 
  12205.       is run for the first time.  The dump file's name is made by appending 
  12206.       `.sched' to the input file name. 
  12207.  
  12208.      Register class preferencing.  The RTL code is scanned to find out which 
  12209.       register class is best for each pseudo register.  The source file is 
  12210.       `regclass.c'. 
  12211.  
  12212.      Local register allocation (`local-alloc.c').  This pass allocates hard 
  12213.       registers to pseudo registers that are used only within one basic block. 
  12214.       Because the basic block is linear, it can use fast and powerful 
  12215.       techniques to do a very good job. 
  12216.  
  12217.       The option `-dl' causes a debugging dump of the RTL code after this pass. 
  12218.       This dump file's name is made by appending `.lreg' to the input file 
  12219.       name. 
  12220.  
  12221.      Global register allocation (`global.c').  This pass allocates hard 
  12222.       registers for the remaining pseudo registers (those whose life spans are 
  12223.       not contained in one basic block). 
  12224.  
  12225.      Reloading.  This pass renumbers pseudo registers with the hardware 
  12226.       registers numbers they were allocated.  Pseudo registers that did not get 
  12227.       hard registers are replaced with stack slots.  Then it finds instructions 
  12228.       that are invalid because a value has failed to end up in a register, or 
  12229.       has ended up in a register of the wrong kind.  It fixes up these 
  12230.       instructions by reloading the problematical values temporarily into 
  12231.       registers.  Additional instructions are generated to do the copying. 
  12232.  
  12233.       The reload pass also optionally eliminates the frame pointer and inserts 
  12234.       instructions to save and restore call-clobbered registers around calls. 
  12235.  
  12236.       Source files are `reload.c' and `reload1.c', plus the header `reload.h' 
  12237.       used for communication between them. 
  12238.  
  12239.       The option `-dg' causes a debugging dump of the RTL code after this pass. 
  12240.       This dump file's name is made by appending `.greg' to the input file 
  12241.       name. 
  12242.  
  12243.      Instruction scheduling is repeated here to try to avoid pipeline stalls 
  12244.       due to memory loads generated for spilled pseudo registers. 
  12245.  
  12246.       The option `-dR' causes a debugging dump of the RTL code after this pass. 
  12247.       This dump file's name is made by appending `.sched2' to the input file 
  12248.       name. 
  12249.  
  12250.      Jump optimization is repeated, this time including cross-jumping and 
  12251.       deletion of no-op move instructions. 
  12252.  
  12253.       The option `-dJ' causes a debugging dump of the RTL code after this pass. 
  12254.       This dump file's name is made by appending `.jump2' to the input file 
  12255.       name. 
  12256.  
  12257.      Delayed branch scheduling.  This optional pass attempts to find 
  12258.       instructions that can go into the delay slots of other instructions, 
  12259.       usually jumps and calls.  The source file name is `reorg.c'. 
  12260.  
  12261.       The option `-dd' causes a debugging dump of the RTL code after this pass. 
  12262.       This dump file's name is made by appending `.dbr' to the input file name. 
  12263.  
  12264.      Conversion from usage of some hard registers to usage of a register stack 
  12265.       may be done at this point.  Currently, this is supported only for the 
  12266.       floating-point registers of the Intel 80387 coprocessor.  The source file 
  12267.       name is `reg-stack.c'. 
  12268.  
  12269.       The options `-dk' causes a debugging dump of the RTL code after this 
  12270.       pass.  This dump file's name is made by appending `.stack' to the input 
  12271.       file name. 
  12272.  
  12273.      Final.  This pass outputs the assembler code for the function.  It is 
  12274.       also responsible for identifying spurious test and compare instructions. 
  12275.       Machine-specific peephole optimizations are performed at the same time. 
  12276.       The function entry and exit sequences are generated directly as assembler 
  12277.       code in this pass; they never exist as RTL. 
  12278.  
  12279.       The source files are `final.c' plus `insn-output.c'; the latter is 
  12280.       generated automatically from the machine description by the tool 
  12281.       `genoutput'.  The header file `conditions.h' is used for communication 
  12282.       between these files. 
  12283.  
  12284.      Debugging information output.  This is run after final because it must 
  12285.       output the stack slot offsets for pseudo registers that did not get hard 
  12286.       registers.  Source files are `dbxout.c' for DBX symbol table format, 
  12287.       `sdbout.c' for SDB symbol table format, and `dwarfout.c' for DWARF symbol 
  12288.       table format. 
  12289.  
  12290.  Some additional files are used by all or many passes : 
  12291.  
  12292.      Every pass uses `machmode.def' and `machmode.h' which define the machine 
  12293.       modes. 
  12294.  
  12295.      Several passes use `real.h', which defines the default representation of 
  12296.       floating point constants and how to operate on them. 
  12297.  
  12298.      All the passes that work with RTL use the header files `rtl.h' and 
  12299.       `rtl.def', and subroutines in file `rtl.c'.  The tools gen* also use 
  12300.       these files to read and work with the machine description RTL. 
  12301.  
  12302.      Several passes refer to the header file `insn-config.h' which contains a 
  12303.       few parameters (C macro definitions) generated automatically from the 
  12304.       machine description RTL by the tool genconfig. 
  12305.  
  12306.      Several passes use the instruction recognizer, which consists of 
  12307.       `recog.c' and `recog.h', plus the files `insn-recog.c' and 
  12308.       `insn-extract.c' that are generated automatically from the machine 
  12309.       description by the tools `genrecog' and `genextract'. 
  12310.  
  12311.      Several passes use the header files `regs.h' which defines the 
  12312.       information recorded about pseudo register usage, and `basic-block.h' 
  12313.       which defines the information recorded about basic blocks. 
  12314.  
  12315.      `hard-reg-set.h' defines the type HARD_REG_SET, a bit-vector with a bit 
  12316.       for each hard register, and some macros to manipulate it. This type is 
  12317.       just int if the machine has few enough hard registers; otherwise it is an 
  12318.       array of int and some of the macros expand into loops. 
  12319.  
  12320.      Several passes use instruction attributes.  A definition of the 
  12321.       attributes defined for a particular machine is in file `insn-attr.h', 
  12322.       which is generated from the machine description by the program `genattr'. 
  12323.       The file `insn-attrtab.c' contains subroutines to obtain the attribute 
  12324.       values for insns.  It is generated from the machine description by the 
  12325.       program `genattrtab'. 
  12326.  
  12327.  
  12328. ΓòÉΓòÉΓòÉ 19. RTL Representation ΓòÉΓòÉΓòÉ
  12329.  
  12330. Most of the work of the compiler is done on an intermediate representation 
  12331. called register transfer language.  In this language, the instructions to be 
  12332. output are described, pretty much one by one, in an algebraic form that 
  12333. describes what the instruction does. 
  12334.  
  12335. RTL is inspired by Lisp lists.  It has both an internal form, made up of 
  12336. structures that point at other structures, and a textual form that is used in 
  12337. the machine description and in printed debugging dumps.  The textual form uses 
  12338. nested parentheses to indicate the pointers in the internal form. 
  12339.  
  12340.  RTL Objects                             Expressions vs vectors vs strings vs 
  12341.                                          integers. 
  12342.  Accessors                               Macros to access expression operands 
  12343.                                          or vector elts. 
  12344.  Flags                                   Other flags in an RTL expression. 
  12345.  Machine Modes                           Describing the size and format of a 
  12346.                                          datum. 
  12347.  Constants                               Expressions with constant values. 
  12348.  Regs and Memory                         Expressions representing register 
  12349.                                          contents or memory. 
  12350.  Arithmetic                              Expressions representing arithmetic on 
  12351.                                          other expressions. 
  12352.  Comparisons                             Expressions representing comparison of 
  12353.                                          expressions. 
  12354.  Bit Fields                              Expressions representing bitfields in 
  12355.                                          memory or reg. 
  12356.  Conversions                             Extending, truncating, floating or 
  12357.                                          fixing. 
  12358.  RTL Declarations                        Declaring volatility, constancy, etc. 
  12359.  Side Effects                            Expressions for storing in registers, 
  12360.                                          etc. 
  12361.  Incdec                                  Embedded side-effects for 
  12362.                                          autoincrement addressing. 
  12363.  Assembler                               Representing asm with operands. 
  12364.  Insns                                   Expression types for entire insns. 
  12365.  Calls                                   RTL representation of function call 
  12366.                                          insns. 
  12367.  Sharing                                 Some expressions are unique; others 
  12368.                                          *must* be copied. 
  12369.  Reading RTL                             Reading textual RTL from a file. 
  12370.  
  12371.  
  12372. ΓòÉΓòÉΓòÉ 19.1. RTL Object Types ΓòÉΓòÉΓòÉ
  12373.  
  12374. RTL uses five kinds of objects: expressions, integers, wide integers, strings 
  12375. and vectors.  Expressions are the most important ones.  An RTL expression 
  12376. (``RTX'', for short) is a C structure, but it is usually referred to with a 
  12377. pointer; a type that is given the typedef name rtx. 
  12378.  
  12379. An integer is simply an int; their written form uses decimal digits. A wide 
  12380. integer is an integral object whose type is HOST_WIDE_INT (see Config); their 
  12381. written form uses decimal digits. 
  12382.  
  12383. A string is a sequence of characters.  In core it is represented as a char * in 
  12384. usual C fashion, and it is written in C syntax as well. However, strings in RTL 
  12385. may never be null.  If you write an empty string in a machine description, it 
  12386. is represented in core as a null pointer rather than as a pointer to a null 
  12387. character.  In certain contexts, these null pointers instead of strings are 
  12388. valid.  Within RTL code, strings are most commonly found inside symbol_ref 
  12389. expressions, but they appear in other contexts in the RTL expressions that make 
  12390. up machine descriptions. 
  12391.  
  12392. A vector contains an arbitrary number of pointers to expressions.  The number 
  12393. of elements in the vector is explicitly present in the vector. The written form 
  12394. of a vector consists of square brackets (`[...]') surrounding the elements, in 
  12395. sequence and with whitespace separating them.  Vectors of length zero are not 
  12396. created; null pointers are used instead. 
  12397.  
  12398. Expressions are classified by expression codes (also called RTX codes).  The 
  12399. expression code is a name defined in `rtl.def', which is also (in upper case) a 
  12400. C enumeration constant.  The possible expression codes and their meanings are 
  12401. machine-independent.  The code of an RTX can be extracted with the macro 
  12402. GET_CODE (x) and altered with PUT_CODE (x, newcode). 
  12403.  
  12404. The expression code determines how many operands the expression contains, and 
  12405. what kinds of objects they are.  In RTL, unlike Lisp, you cannot tell by 
  12406. looking at an operand what kind of object it is.  Instead, you must know from 
  12407. its context---from the expression code of the containing expression. For 
  12408. example, in an expression of code subreg, the first operand is to be regarded 
  12409. as an expression and the second operand as an integer.  In an expression of 
  12410. code plus, there are two operands, both of which are to be regarded as 
  12411. expressions.  In a symbol_ref expression, there is one operand, which is to be 
  12412. regarded as a string. 
  12413.  
  12414. Expressions are written as parentheses containing the name of the expression 
  12415. type, its flags and machine mode if any, and then the operands of the 
  12416. expression (separated by spaces). 
  12417.  
  12418. Expression code names in the `md' file are written in lower case, but when they 
  12419. appear in C code they are written in upper case.  In this manual, they are 
  12420. shown as follows: const_int. 
  12421.  
  12422. In a few contexts a null pointer is valid where an expression is normally 
  12423. wanted.  The written form of this is (nil). 
  12424.  
  12425.  
  12426. ΓòÉΓòÉΓòÉ 19.2. Access to Operands ΓòÉΓòÉΓòÉ
  12427.  
  12428. For each expression type `rtl.def' specifies the number of contained objects 
  12429. and their kinds, with four possibilities: `e' for expression (actually a 
  12430. pointer to an expression), `i' for integer, `w' for wide integer, `s' for 
  12431. string, and `E' for vector of expressions.  The sequence of letters for an 
  12432. expression code is called its format.  Thus, the format of subreg is `ei'. 
  12433.  
  12434. A few other format characters are used occasionally: 
  12435.  
  12436.  u 
  12437.            `u' is equivalent to `e' except that it is printed differently in 
  12438.            debugging dumps.  It is used for pointers to insns. 
  12439.  
  12440.  n 
  12441.            `n' is equivalent to `i' except that it is printed differently in 
  12442.            debugging dumps.  It is used for the line number or code number of a 
  12443.            note insn. 
  12444.  
  12445.  S 
  12446.            `S' indicates a string which is optional.  In the RTL objects in 
  12447.            core, `S' is equivalent to `s', but when the object is read, from an 
  12448.            `md' file, the string value of this operand may be omitted. An 
  12449.            omitted string is taken to be the null string. 
  12450.  
  12451.  V 
  12452.            `V' indicates a vector which is optional.  In the RTL objects in 
  12453.            core, `V' is equivalent to `E', but when the object is read from an 
  12454.            `md' file, the vector value of this operand may be omitted. An 
  12455.            omitted vector is effectively the same as a vector of no elements. 
  12456.  
  12457.  0 
  12458.            `0' means a slot whose contents do not fit any normal category. `0' 
  12459.            slots are not printed at all in dumps, and are often used in special 
  12460.            ways by small parts of the compiler. 
  12461.  
  12462.  There are macros to get the number of operands, the format, and the class of 
  12463.  an expression code: 
  12464.  
  12465.  GET_RTX_LENGTH (code) 
  12466.            Number of operands of an RTX of code code. 
  12467.  
  12468.  GET_RTX_FORMAT (code) 
  12469.            The format of an RTX of code code, as a C string. 
  12470.  
  12471.  GET_RTX_CLASS (code) 
  12472.            A single character representing the type of RTX operation that code 
  12473.            code performs. 
  12474.  
  12475.            The following classes are defined: 
  12476.  
  12477.            o 
  12478.                           An RTX code that represents an actual object, such as 
  12479.                           reg or mem.  subreg is not in this class. 
  12480.  
  12481.            < 
  12482.                           An RTX code for a comparison.  The codes in this 
  12483.                           class are NE, EQ, LE, LT, GE, GT, LEU, LTU, GEU, GTU. 
  12484.  
  12485.            1 
  12486.                           An RTX code for a unary arithmetic operation, such as 
  12487.                           neg. 
  12488.  
  12489.            c 
  12490.                           An RTX code for a commutative binary operation, other 
  12491.                           than NE and EQ (which have class `<'). 
  12492.  
  12493.            2 
  12494.                           An RTX code for a noncommutative binary operation, 
  12495.                           such as MINUS. 
  12496.  
  12497.            b 
  12498.                           An RTX code for a bitfield operation, either 
  12499.                           ZERO_EXTRACT or SIGN_EXTRACT. 
  12500.  
  12501.            3 
  12502.                           An RTX code for other three input operations, such as 
  12503.                           IF_THEN_ELSE. 
  12504.  
  12505.            i 
  12506.                           An RTX code for a machine insn (INSN, JUMP_INSN, and 
  12507.                           CALL_INSN). 
  12508.  
  12509.            m 
  12510.                           An RTX code for something that matches in insns, such 
  12511.                           as MATCH_DUP. 
  12512.  
  12513.            x 
  12514.                           All other RTX codes. 
  12515.  
  12516.  Operands of expressions are accessed using the macros XEXP, XINT, XWINT and 
  12517.  XSTR.  Each of these macros takes two arguments: an expression-pointer (RTX) 
  12518.  and an operand number (counting from zero).  Thus, 
  12519.  
  12520.   XEXP (x, 2)
  12521.  
  12522.  accesses operand 2 of expression x, as an expression. 
  12523.  
  12524.   XINT (x, 2)
  12525.  
  12526.  accesses the same operand as an integer.  XSTR, used in the same fashion, 
  12527.  would access it as a string. 
  12528.  
  12529.  Any operand can be accessed as an integer, as an expression or as a string. 
  12530.  You must choose the correct method of access for the kind of value actually 
  12531.  stored in the operand.  You would do this based on the expression code of the 
  12532.  containing expression.  That is also how you would know how many operands 
  12533.  there are. 
  12534.  
  12535.  For example, if x is a subreg expression, you know that it has two operands 
  12536.  which can be correctly accessed as XEXP (x, 0) and XINT (x, 1).  If you did 
  12537.  XINT (x, 0), you would get the address of the expression operand but cast as 
  12538.  an integer; that might occasionally be useful, but it would be cleaner to 
  12539.  write (int) XEXP (x, 0).  XEXP (x, 1) would also compile without error, and 
  12540.  would return the second, integer operand cast as an expression pointer, which 
  12541.  would probably result in a crash when accessed.  Nothing stops you from 
  12542.  writing XEXP (x, 28) either, but this will access memory past the end of the 
  12543.  expression with unpredictable results. 
  12544.  
  12545.  Access to operands which are vectors is more complicated.  You can use the 
  12546.  macro XVEC to get the vector-pointer itself, or the macros XVECEXP and XVECLEN 
  12547.  to access the elements and length of a vector. 
  12548.  
  12549.  XVEC (exp, idx) 
  12550.            Access the vector-pointer which is operand number idx in exp. 
  12551.  
  12552.  XVECLEN (exp, idx) 
  12553.            Access the length (number of elements) in the vector which is in 
  12554.            operand number idx in exp.  This value is an int. 
  12555.  
  12556.  XVECEXP (exp, idx, eltnum) 
  12557.            Access element number eltnum in the vector which is in operand 
  12558.            number idx in exp.  This value is an RTX. 
  12559.  
  12560.            It is up to you to make sure that eltnum is not negative and is less 
  12561.            than XVECLEN (exp, idx). 
  12562.  
  12563.  All the macros defined in this section expand into lvalues and therefore can 
  12564.  be used to assign the operands, lengths and vector elements as well as to 
  12565.  access them. 
  12566.  
  12567.  
  12568. ΓòÉΓòÉΓòÉ 19.3. Flags in an RTL Expression ΓòÉΓòÉΓòÉ
  12569.  
  12570. RTL expressions contain several flags (one-bit bitfields) that are used in 
  12571. certain types of expression.  Most often they are accessed with the following 
  12572. macros: 
  12573.  
  12574.  MEM_VOLATILE_P (x) 
  12575.            In mem expressions, nonzero for volatile memory references. Stored 
  12576.            in the volatil field and printed as `/v'. 
  12577.  
  12578.  MEM_IN_STRUCT_P (x) 
  12579.            In mem expressions, nonzero for reference to an entire structure, 
  12580.            union or array, or to a component of one.  Zero for references to a 
  12581.            scalar variable or through a pointer to a scalar. Stored in the 
  12582.            in_struct field and printed as `/s'. 
  12583.  
  12584.  REG_LOOP_TEST_P 
  12585.            In reg expressions, nonzero if this register's entire life is 
  12586.            contained in the exit test code for some loop.  Stored in the 
  12587.            in_struct field and printed as `/s'. 
  12588.  
  12589.  REG_USERVAR_P (x) 
  12590.            In a reg, nonzero if it corresponds to a variable present in the 
  12591.            user's source code.  Zero for temporaries generated internally by 
  12592.            the compiler.  Stored in the volatil field and printed as `/v'. 
  12593.  
  12594.  REG_FUNCTION_VALUE_P (x) 
  12595.            Nonzero in a reg if it is the place in which this function's value 
  12596.            is going to be returned.  (This happens only in a hard register.) 
  12597.            Stored in the integrated field and printed as `/i'. 
  12598.  
  12599.            The same hard register may be used also for collecting the values of 
  12600.            functions called by this one, but REG_FUNCTION_VALUE_P is zero in 
  12601.            this kind of use. 
  12602.  
  12603.  SUBREG_PROMOTED_VAR_P 
  12604.            Nonzero in a subreg if it was made when accessing an object that was 
  12605.            promoted to a wider mode in accord with the PROMOTED_MODE machine 
  12606.            description macro (see Storage Layout).  In this case, the mode of 
  12607.            the subreg is the declared mode of the object and the mode of 
  12608.            SUBREG_REG is the mode of the register that holds the object. 
  12609.            Promoted variables are always either sign- or zero-extended to the 
  12610.            wider mode on every assignment.  Stored in the in_struct field and 
  12611.            printed as `/s'. 
  12612.  
  12613.  SUBREG_PROMOTED_UNSIGNED_P 
  12614.            Nonzero in a subreg that has SUBREG_PROMOTED_VAR_P nonzero if the 
  12615.            object being referenced is kept zero-extended and zero if it is kept 
  12616.            sign-extended.  Stored in the unchanging field and printed as `/u'. 
  12617.  
  12618.  RTX_UNCHANGING_P (x) 
  12619.            Nonzero in a reg or mem if the value is not changed. (This flag is 
  12620.            not set for memory references via pointers to constants. Such 
  12621.            pointers only guarantee that the object will not be changed 
  12622.            explicitly by the current function.  The object might be changed by 
  12623.            other functions or by aliasing.)  Stored in the unchanging field and 
  12624.            printed as `/u'. 
  12625.  
  12626.  RTX_INTEGRATED_P (insn) 
  12627.            Nonzero in an insn if it resulted from an in-line function call. 
  12628.            Stored in the integrated field and printed as `/i'.  This may be 
  12629.            deleted; nothing currently depends on it. 
  12630.  
  12631.  SYMBOL_REF_USED (x) 
  12632.            In a symbol_ref, indicates that x has been used.  This is normally 
  12633.            only used to ensure that x is only declared external once.  Stored 
  12634.            in the used field. 
  12635.  
  12636.  SYMBOL_REF_FLAG (x) 
  12637.            In a symbol_ref, this is used as a flag for machine-specific 
  12638.            purposes. Stored in the volatil field and printed as `/v'. 
  12639.  
  12640.  LABEL_OUTSIDE_LOOP_P 
  12641.            In label_ref expressions, nonzero if this is a reference to a label 
  12642.            that is outside the innermost loop containing the reference to the 
  12643.            label.  Stored in the in_struct field and printed as `/s'. 
  12644.  
  12645.  INSN_DELETED_P (insn) 
  12646.            In an insn, nonzero if the insn has been deleted.  Stored in the 
  12647.            volatil field and printed as `/v'. 
  12648.  
  12649.  INSN_ANNULLED_BRANCH_P (insn) 
  12650.            In an insn in the delay slot of a branch insn, indicates that an 
  12651.            annulling branch should be used.  See the discussion under sequence 
  12652.            below.  Stored in the unchanging field and printed as `/u'. 
  12653.  
  12654.  INSN_FROM_TARGET_P (insn) 
  12655.            In an insn in a delay slot of a branch, indicates that the insn is 
  12656.            from the target of the branch.  If the branch insn has 
  12657.            INSN_ANNULLED_BRANCH_P set, this insn should only be executed if the 
  12658.            branch is taken.  For annulled branches with this bit clear, the 
  12659.            insn should be executed only if the branch is not taken.  Stored in 
  12660.            the in_struct field and printed as `/s'. 
  12661.  
  12662.  CONSTANT_POOL_ADDRESS_P (x) 
  12663.            Nonzero in a symbol_ref if it refers to part of the current 
  12664.            function's ``constants pool''.  These are addresses close to the 
  12665.            beginning of the function, and GNU CC assumes they can be addressed 
  12666.            directly (perhaps with the help of base registers).  Stored in the 
  12667.            unchanging field and printed as `/u'. 
  12668.  
  12669.  CONST_CALL_P (x) 
  12670.            In a call_insn, indicates that the insn represents a call to a const 
  12671.            function.  Stored in the unchanging field and printed as `/u'. 
  12672.  
  12673.  LABEL_PRESERVE_P (x) 
  12674.            In a code_label, indicates that the label can never be deleted. 
  12675.            Labels referenced by a non-local goto will have this bit set. 
  12676.            Stored in the in_struct field and printed as `/s'. 
  12677.  
  12678.  SCHED_GROUP_P (insn) 
  12679.            During instruction scheduling, in an insn, indicates that the 
  12680.            previous insn must be scheduled together with this insn.  This is 
  12681.            used to ensure that certain groups of instructions will not be split 
  12682.            up by the instruction scheduling pass, for example, use insns before 
  12683.            a call_insn may not be separated from the call_insn.  Stored in the 
  12684.            in_struct field and printed as `/s'. 
  12685.  
  12686.  These are the fields which the above macros refer to: 
  12687.  
  12688.  used 
  12689.            Normally, this flag is used only momentarily, at the end of RTL 
  12690.            generation for a function, to count the number of times an 
  12691.            expression appears in insns.  Expressions that appear more than once 
  12692.            are copied, according to the rules for shared structure (see 
  12693.            Sharing). 
  12694.  
  12695.            In a symbol_ref, it indicates that an external declaration for the 
  12696.            symbol has already been written. 
  12697.  
  12698.            In a reg, it is used by the leaf register renumbering code to ensure 
  12699.            that each register is only renumbered once. 
  12700.  
  12701.  volatil 
  12702.            This flag is used in mem, symbol_ref and reg expressions and in 
  12703.            insns.  In RTL dump files, it is printed as `/v'. 
  12704.  
  12705.            In a mem expression, it is 1 if the memory reference is volatile. 
  12706.            Volatile memory references may not be deleted, reordered or 
  12707.            combined. 
  12708.  
  12709.            In a symbol_ref expression, it is used for machine-specific 
  12710.            purposes. 
  12711.  
  12712.            In a reg expression, it is 1 if the value is a user-level variable. 
  12713.            0 indicates an internal compiler temporary. 
  12714.  
  12715.            In an insn, 1 means the insn has been deleted. 
  12716.  
  12717.  in_struct 
  12718.            In mem expressions, it is 1 if the memory datum referred to is all 
  12719.            or part of a structure or array; 0 if it is (or might be) a scalar 
  12720.            variable.  A reference through a C pointer has 0 because the pointer 
  12721.            might point to a scalar variable.  This information allows the 
  12722.            compiler to determine something about possible cases of aliasing. 
  12723.  
  12724.            In an insn in the delay slot of a branch, 1 means that this insn is 
  12725.            from the target of the branch. 
  12726.  
  12727.            During instruction scheduling, in an insn, 1 means that this insn 
  12728.            must be scheduled as part of a group together with the previous 
  12729.            insn. 
  12730.  
  12731.            In reg expressions, it is 1 if the register has its entire life 
  12732.            contained within the test expression of some loop. 
  12733.  
  12734.            In subreg expressions, 1 means that the subreg is accessing an 
  12735.            object that has had its mode promoted from a wider mode. 
  12736.  
  12737.            In label_ref expressions, 1 means that the referenced label is 
  12738.            outside the innermost loop containing the insn in which the 
  12739.            label_ref was found. 
  12740.  
  12741.            In code_label expressions, it is 1 if the label may never be 
  12742.            deleted. This is used for labels which are the target of non-local 
  12743.            gotos. 
  12744.  
  12745.            In an RTL dump, this flag is represented as `/s'. 
  12746.  
  12747.  unchanging 
  12748.            In reg and mem expressions, 1 means that the value of the expression 
  12749.            never changes. 
  12750.  
  12751.            In subreg expressions, it is 1 if the subreg references an unsigned 
  12752.            object whose mode has been promoted to a wider mode. 
  12753.  
  12754.            In an insn, 1 means that this is an annulling branch. 
  12755.  
  12756.            In a symbol_ref expression, 1 means that this symbol addresses 
  12757.            something in the per-function constants pool. 
  12758.  
  12759.            In a call_insn, 1 means that this instruction is a call to a const 
  12760.            function. 
  12761.  
  12762.            In an RTL dump, this flag is represented as `/u'. 
  12763.  
  12764.  integrated 
  12765.            In some kinds of expressions, including insns, this flag means the 
  12766.            rtl was produced by procedure integration. 
  12767.  
  12768.            In a reg expression, this flag indicates the register containing the 
  12769.            value to be returned by the current function.  On machines that pass 
  12770.            parameters in registers, the same register number may be used for 
  12771.            parameters as well, but this flag is not set on such uses. 
  12772.  
  12773.  
  12774. ΓòÉΓòÉΓòÉ 19.4. Machine Modes ΓòÉΓòÉΓòÉ
  12775.  
  12776. A machine mode describes a size of data object and the representation used for 
  12777. it.  In the C code, machine modes are represented by an enumeration type, enum 
  12778. machine_mode, defined in `machmode.def'.  Each RTL expression has room for a 
  12779. machine mode and so do certain kinds of tree expressions (declarations and 
  12780. types, to be precise). 
  12781.  
  12782. In debugging dumps and machine descriptions, the machine mode of an RTL 
  12783. expression is written after the expression code with a colon to separate them. 
  12784. The letters `mode' which appear at the end of each machine mode name are 
  12785. omitted.  For example, (reg:SI 38) is a reg expression with machine mode 
  12786. SImode.  If the mode is VOIDmode, it is not written at all. 
  12787.  
  12788. Here is a table of machine modes.  The term ``byte'' below refers to an object 
  12789. of BITS_PER_UNIT bits (see Storage Layout). 
  12790.  
  12791.  QImode 
  12792.            ``Quarter-Integer'' mode represents a single byte treated as an 
  12793.            integer. 
  12794.  
  12795.  HImode 
  12796.            ``Half-Integer'' mode represents a two-byte integer. 
  12797.  
  12798.  PSImode 
  12799.            ``Partial Single Integer'' mode represents an integer which occupies 
  12800.            four bytes but which doesn't really use all four.  On some machines, 
  12801.            this is the right mode to use for pointers. 
  12802.  
  12803.  SImode 
  12804.            ``Single Integer'' mode represents a four-byte integer. 
  12805.  
  12806.  PDImode 
  12807.            ``Partial Double Integer'' mode represents an integer which occupies 
  12808.            eight bytes but which doesn't really use all eight.  On some 
  12809.            machines, this is the right mode to use for certain pointers. 
  12810.  
  12811.  DImode 
  12812.            ``Double Integer'' mode represents an eight-byte integer. 
  12813.  
  12814.  TImode 
  12815.            ``Tetra Integer'' (?) mode represents a sixteen-byte integer. 
  12816.  
  12817.  SFmode 
  12818.            ``Single Floating'' mode represents a single-precision (four byte) 
  12819.            floating point number. 
  12820.  
  12821.  DFmode 
  12822.            ``Double Floating'' mode represents a double-precision (eight byte) 
  12823.            floating point number. 
  12824.  
  12825.  XFmode 
  12826.            ``Extended Floating'' mode represents a triple-precision (twelve 
  12827.            byte) floating point number.  This mode is used for IEEE extended 
  12828.            floating point.  On some systems not all bits within these bytes 
  12829.            will actually be used. 
  12830.  
  12831.  TFmode 
  12832.            ``Tetra Floating'' mode represents a quadruple-precision (sixteen 
  12833.            byte) floating point number. 
  12834.  
  12835.  CCmode 
  12836.            ``Condition Code'' mode represents the value of a condition code, 
  12837.            which is a machine-specific set of bits used to represent the result 
  12838.            of a comparison operation.  Other machine-specific modes may also be 
  12839.            used for the condition code.  These modes are not used on machines 
  12840.            that use cc0 (see see Condition Code). 
  12841.  
  12842.  BLKmode 
  12843.            ``Block'' mode represents values that are aggregates to which none 
  12844.            of the other modes apply.  In RTL, only memory references can have 
  12845.            this mode, and only if they appear in string-move or vector 
  12846.            instructions.  On machines which have no such instructions, BLKmode 
  12847.            will not appear in RTL. 
  12848.  
  12849.  VOIDmode 
  12850.            Void mode means the absence of a mode or an unspecified mode. For 
  12851.            example, RTL expressions of code const_int have mode VOIDmode 
  12852.            because they can be taken to have whatever mode the context 
  12853.            requires.  In debugging dumps of RTL, VOIDmode is expressed by the 
  12854.            absence of any mode. 
  12855.  
  12856.  SCmode, DCmode, XCmode, TCmode 
  12857.            These modes stand for a complex number represented as a pair of 
  12858.            floating point values.  The floating point values are in SFmode, 
  12859.            DFmode, XFmode, and TFmode, respectively. 
  12860.  
  12861.  CQImode, CHImode, CSImode, CDImode, CTImode, COImode 
  12862.            These modes stand for a complex number represented as a pair of 
  12863.            integer values.  The integer values are in QImode, HImode, SImode, 
  12864.            DImode, TImode, and OImode, respectively. 
  12865.  
  12866.  The machine description defines Pmode as a C macro which expands into the 
  12867.  machine mode used for addresses.  Normally this is the mode whose size is 
  12868.  BITS_PER_WORD, SImode on 32-bit machines. 
  12869.  
  12870.  The only modes which a machine description must support are QImode, and the 
  12871.  modes corresponding to BITS_PER_WORD, FLOAT_TYPE_SIZE and DOUBLE_TYPE_SIZE. 
  12872.  The compiler will attempt to use DImode for 8-byte structures and unions, but 
  12873.  this can be prevented by overriding the definition of MAX_FIXED_MODE_SIZE. 
  12874.  Alternatively, you can have the compiler use TImode for 16-byte structures and 
  12875.  unions.  Likewise, you can arrange for the C type short int to avoid using 
  12876.  HImode. 
  12877.  
  12878.  Very few explicit references to machine modes remain in the compiler and these 
  12879.  few references will soon be removed.  Instead, the machine modes are divided 
  12880.  into mode classes.  These are represented by the enumeration type enum 
  12881.  mode_class defined in `machmode.h'.  The possible mode classes are: 
  12882.  
  12883.  MODE_INT 
  12884.            Integer modes.  By default these are QImode, HImode, SImode, DImode, 
  12885.            and TImode. 
  12886.  
  12887.  MODE_PARTIAL_INT 
  12888.            The ``partial integer'' modes, PSImode and PDImode. 
  12889.  
  12890.  MODE_FLOAT 
  12891.            floating point modes.  By default these are SFmode, DFmode, XFmode 
  12892.            and TFmode. 
  12893.  
  12894.  MODE_COMPLEX_INT 
  12895.            Complex integer modes.  (These are not currently implemented). 
  12896.  
  12897.  MODE_COMPLEX_FLOAT 
  12898.            Complex floating point modes.  By default these are SCmode, DCmode, 
  12899.            XCmode, and TCmode. 
  12900.  
  12901.  MODE_FUNCTION 
  12902.            Algol or Pascal function variables including a static chain. (These 
  12903.            are not currently implemented). 
  12904.  
  12905.  MODE_CC 
  12906.            Modes representing condition code values.  These are CCmode plus any 
  12907.            modes listed in the EXTRA_CC_MODES macro.  See Jump Patterns, also 
  12908.            see Condition Code. 
  12909.  
  12910.  MODE_RANDOM 
  12911.            This is a catchall mode class for modes which don't fit into the 
  12912.            above classes.  Currently VOIDmode and BLKmode are in MODE_RANDOM. 
  12913.  
  12914.  Here are some C macros that relate to machine modes: 
  12915.  
  12916.  GET_MODE (x) 
  12917.            Returns the machine mode of the RTX x. 
  12918.  
  12919.  PUT_MODE (x, newmode) 
  12920.            Alters the machine mode of the RTX x to be newmode. 
  12921.  
  12922.  NUM_MACHINE_MODES 
  12923.            Stands for the number of machine modes available on the target 
  12924.            machine.  This is one greater than the largest numeric value of any 
  12925.            machine mode. 
  12926.  
  12927.  GET_MODE_NAME (m) 
  12928.            Returns the name of mode m as a string. 
  12929.  
  12930.  GET_MODE_CLASS (m) 
  12931.            Returns the mode class of mode m. 
  12932.  
  12933.  GET_MODE_WIDER_MODE (m) 
  12934.            Returns the next wider natural mode.  For example, the expression 
  12935.            GET_MODE_WIDER_MODE (QImode) returns HImode. 
  12936.  
  12937.  GET_MODE_SIZE (m) 
  12938.            Returns the size in bytes of a datum of mode m. 
  12939.  
  12940.  GET_MODE_BITSIZE (m) 
  12941.            Returns the size in bits of a datum of mode m. 
  12942.  
  12943.  GET_MODE_MASK (m) 
  12944.            Returns a bitmask containing 1 for all bits in a word that fit 
  12945.            within mode m.  This macro can only be used for modes whose bitsize 
  12946.            is less than or equal to HOST_BITS_PER_INT. 
  12947.  
  12948.  GET_MODE_ALIGNMENT (m)) 
  12949.            Return the required alignment, in bits, for an object of mode m. 
  12950.  
  12951.  GET_MODE_UNIT_SIZE (m) 
  12952.            Returns the size in bytes of the subunits of a datum of mode m. This 
  12953.            is the same as GET_MODE_SIZE except in the case of complex modes. 
  12954.            For them, the unit size is the size of the real or imaginary part. 
  12955.  
  12956.  GET_MODE_NUNITS (m) 
  12957.            Returns the number of units contained in a mode, i.e., GET_MODE_SIZE 
  12958.            divided by GET_MODE_UNIT_SIZE. 
  12959.  
  12960.  GET_CLASS_NARROWEST_MODE (c) 
  12961.            Returns the narrowest mode in mode class c. 
  12962.  
  12963.  The global variables byte_mode and word_mode contain modes whose classes are 
  12964.  MODE_INT and whose bitsizes are either BITS_PER_UNIT or BITS_PER_WORD, 
  12965.  respectively.  On 32-bit machines, these are QImode and SImode, respectively. 
  12966.  
  12967.  
  12968. ΓòÉΓòÉΓòÉ 19.5. Constant Expression Types ΓòÉΓòÉΓòÉ
  12969.  
  12970. The simplest RTL expressions are those that represent constant values. 
  12971.  
  12972.  (const_int i) 
  12973.            This type of expression represents the integer value i.  i is 
  12974.            customarily accessed with the macro INTVAL as in INTVAL (exp), which 
  12975.            is equivalent to XWINT (exp, 0). 
  12976.  
  12977.            There is only one expression object for the integer value zero; it 
  12978.            is the value of the variable const0_rtx.  Likewise, the only 
  12979.            expression for integer value one is found in const1_rtx, the only 
  12980.            expression for integer value two is found in const2_rtx, and the 
  12981.            only expression for integer value negative one is found in 
  12982.            constm1_rtx.  Any attempt to create an expression of code const_int 
  12983.            and value zero, one, two or negative one will return const0_rtx, 
  12984.            const1_rtx, const2_rtx or constm1_rtx as appropriate. 
  12985.  
  12986.            Similarly, there is only one object for the integer whose value is 
  12987.            STORE_FLAG_VALUE.  It is found in const_true_rtx.  If 
  12988.            STORE_FLAG_VALUE is one, const_true_rtx and const1_rtx will point to 
  12989.            the same object.  If STORE_FLAG_VALUE is -1, const_true_rtx and 
  12990.            constm1_rtx will point to the same object. 
  12991.  
  12992.  (const_double:m addr i0 i1 ...) 
  12993.            Represents either a floating-point constant of mode m or an integer 
  12994.            constant too large to fit into HOST_BITS_PER_WIDE_INT bits but small 
  12995.            enough to fit within twice that number of bits (GNU CC does not 
  12996.            provide a mechanism to represent even larger constants).  In the 
  12997.            latter case, m will be VOIDmode. 
  12998.  
  12999.            addr is used to contain the mem expression that corresponds to the 
  13000.            location in memory that at which the constant can be found.  If it 
  13001.            has not been allocated a memory location, but is on the chain of all 
  13002.            const_double expressions in this compilation (maintained using an 
  13003.            undisplayed field), addr contains const0_rtx.  If it is not on the 
  13004.            chain, addr contains cc0_rtx.  addr is customarily accessed with the 
  13005.            macro CONST_DOUBLE_MEM and the chain field via CONST_DOUBLE_CHAIN. 
  13006.  
  13007.            If m is VOIDmode, the bits of the value are stored in i0 and i1.  i0 
  13008.            is customarily accessed with the macro CONST_DOUBLE_LOW and i1 with 
  13009.            CONST_DOUBLE_HIGH. 
  13010.  
  13011.            If the constant is floating point (regardless of its precision), 
  13012.            then the number of integers used to store the value depends on the 
  13013.            size of REAL_VALUE_TYPE (see Cross-compilation).  The integers 
  13014.            represent a floating point number, but not precisely in the target 
  13015.            machine's or host machine's floating point format.  To convert them 
  13016.            to the precise bit pattern used by the target machine, use the macro 
  13017.            REAL_VALUE_TO_TARGET_DOUBLE and friends (see Data Output). 
  13018.  
  13019.            The macro CONST0_RTX (mode) refers to an expression with value 0 in 
  13020.            mode mode.  If mode mode is of mode class MODE_INT, it returns 
  13021.            const0_rtx.  Otherwise, it returns a CONST_DOUBLE expression in mode 
  13022.            mode.  Similarly, the macro CONST1_RTX (mode) refers to an 
  13023.            expression with value 1 in mode mode and similarly for CONST2_RTX. 
  13024.  
  13025.  (const_string str) 
  13026.            Represents a constant string with value str.  Currently this is used 
  13027.            only for insn attributes (see Insn Attributes) since constant 
  13028.            strings in C are placed in memory. 
  13029.  
  13030.  (symbol_ref:mode symbol) 
  13031.            Represents the value of an assembler label for data.  symbol is a 
  13032.            string that describes the name of the assembler label.  If it starts 
  13033.            with a `*', the label is the rest of symbol not including the `*'. 
  13034.            Otherwise, the label is symbol, usually prefixed with `_'. 
  13035.  
  13036.            The symbol_ref contains a mode, which is usually Pmode. Usually that 
  13037.            is the only mode for which a symbol is directly valid. 
  13038.  
  13039.  (label_ref label) 
  13040.            Represents the value of an assembler label for code.  It contains 
  13041.            one operand, an expression, which must be a code_label that appears 
  13042.            in the instruction sequence to identify the place where the label 
  13043.            should go. 
  13044.  
  13045.            The reason for using a distinct expression type for code label 
  13046.            references is so that jump optimization can distinguish them. 
  13047.  
  13048.  (const:m exp) 
  13049.            Represents a constant that is the result of an assembly-time 
  13050.            arithmetic computation.  The operand, exp, is an expression that 
  13051.            contains only constants (const_int, symbol_ref and label_ref 
  13052.            expressions) combined with plus and minus.  However, not all 
  13053.            combinations are valid, since the assembler cannot do arbitrary 
  13054.            arithmetic on relocatable symbols. 
  13055.  
  13056.            m should be Pmode. 
  13057.  
  13058.  (high:m exp) 
  13059.            Represents the high-order bits of exp, usually a symbol_ref.  The 
  13060.            number of bits is machine-dependent and is normally the number of 
  13061.            bits specified in an instruction that initializes the high order 
  13062.            bits of a register.  It is used with lo_sum to represent the typical 
  13063.            two-instruction sequence used in RISC machines to reference a global 
  13064.            memory location. 
  13065.  
  13066.            m should be Pmode. 
  13067.  
  13068.  
  13069. ΓòÉΓòÉΓòÉ 19.6. Registers and Memory ΓòÉΓòÉΓòÉ
  13070.  
  13071. Here are the RTL expression types for describing access to machine registers 
  13072. and to main memory. 
  13073.  
  13074.  (reg:m n) 
  13075.            For small values of the integer n (those that are less than 
  13076.            FIRST_PSEUDO_REGISTER), this stands for a reference to machine 
  13077.            register number n: a hard register.  For larger values of n, it 
  13078.            stands for a temporary value or pseudo register. The compiler's 
  13079.            strategy is to generate code assuming an unlimited number of such 
  13080.            pseudo registers, and later convert them into hard registers or into 
  13081.            memory references. 
  13082.  
  13083.            m is the machine mode of the reference.  It is necessary because 
  13084.            machines can generally refer to each register in more than one mode. 
  13085.            For example, a register may contain a full word but there may be 
  13086.            instructions to refer to it as a half word or as a single byte, as 
  13087.            well as instructions to refer to it as a floating point number of 
  13088.            various precisions. 
  13089.  
  13090.            Even for a register that the machine can access in only one mode, 
  13091.            the mode must always be specified. 
  13092.  
  13093.            The symbol FIRST_PSEUDO_REGISTER is defined by the machine 
  13094.            description, since the number of hard registers on the machine is an 
  13095.            invariant characteristic of the machine.  Note, however, that not 
  13096.            all of the machine registers must be general registers.  All the 
  13097.            machine registers that can be used for storage of data are given 
  13098.            hard register numbers, even those that can be used only in certain 
  13099.            instructions or can hold only certain types of data. 
  13100.  
  13101.            A hard register may be accessed in various modes throughout one 
  13102.            function, but each pseudo register is given a natural mode and is 
  13103.            accessed only in that mode.  When it is necessary to describe an 
  13104.            access to a pseudo register using a nonnatural mode, a subreg 
  13105.            expression is used. 
  13106.  
  13107.            A reg expression with a machine mode that specifies more than one 
  13108.            word of data may actually stand for several consecutive registers. 
  13109.            If in addition the register number specifies a hardware register, 
  13110.            then it actually represents several consecutive hardware registers 
  13111.            starting with the specified one. 
  13112.  
  13113.            Each pseudo register number used in a function's RTL code is 
  13114.            represented by a unique reg expression. 
  13115.  
  13116.            Some pseudo register numbers, those within the range of 
  13117.            FIRST_VIRTUAL_REGISTER to LAST_VIRTUAL_REGISTER only appear during 
  13118.            the RTL generation phase and are eliminated before the optimization 
  13119.            phases.  These represent locations in the stack frame that cannot be 
  13120.            determined until RTL generation for the function has been completed. 
  13121.            The following virtual register numbers are defined: 
  13122.  
  13123.            VIRTUAL_INCOMING_ARGS_REGNUM 
  13124.                           This points to the first word of the incoming 
  13125.                           arguments passed on the stack.  Normally these 
  13126.                           arguments are placed there by the caller, but the 
  13127.                           callee may have pushed some arguments that were 
  13128.                           previously passed in registers. 
  13129.  
  13130.                           When RTL generation is complete, this virtual 
  13131.                           register is replaced by the sum of the register given 
  13132.                           by ARG_POINTER_REGNUM and the value of 
  13133.                           FIRST_PARM_OFFSET. 
  13134.  
  13135.            VIRTUAL_STACK_VARS_REGNUM 
  13136.                           If FRAME_GROWS_DOWNWARD is defined, this points to 
  13137.                           immediately above the first variable on the stack. 
  13138.                           Otherwise, it points to the first variable on the 
  13139.                           stack. 
  13140.  
  13141.                           VIRTUAL_STACK_VARS_REGNUM is replaced with the sum of 
  13142.                           the register given by FRAME_POINTER_REGNUM and the 
  13143.                           value STARTING_FRAME_OFFSET. 
  13144.  
  13145.            VIRTUAL_STACK_DYNAMIC_REGNUM 
  13146.                           This points to the location of dynamically allocated 
  13147.                           memory on the stack immediately after the stack 
  13148.                           pointer has been adjusted by the amount of memory 
  13149.                           desired. 
  13150.  
  13151.                           This virtual register is replaced by the sum of the 
  13152.                           register given by STACK_POINTER_REGNUM and the value 
  13153.                           STACK_DYNAMIC_OFFSET. 
  13154.  
  13155.            VIRTUAL_OUTGOING_ARGS_REGNUM 
  13156.                           This points to the location in the stack at which 
  13157.                           outgoing arguments should be written when the stack 
  13158.                           is pre-pushed (arguments pushed using push insns 
  13159.                           should always use STACK_POINTER_REGNUM). 
  13160.  
  13161.                           This virtual register is replaced by the sum of the 
  13162.                           register given by STACK_POINTER_REGNUM and the value 
  13163.                           STACK_POINTER_OFFSET. 
  13164.  
  13165.  (subreg:m reg wordnum) 
  13166.            subreg expressions are used to refer to a register in a machine mode 
  13167.            other than its natural one, or to refer to one register of a 
  13168.            multi-word reg that actually refers to several registers. 
  13169.  
  13170.            Each pseudo-register has a natural mode.  If it is necessary to 
  13171.            operate on it in a different mode---for example, to perform a 
  13172.            fullword move instruction on a pseudo-register that contains a 
  13173.            single byte---the pseudo-register must be enclosed in a subreg.  In 
  13174.            such a case, wordnum is zero. 
  13175.  
  13176.            Usually m is at least as narrow as the mode of reg, in which case it 
  13177.            is restricting consideration to only the bits of reg that are in m. 
  13178.  
  13179.            Sometimes m is wider than the mode of reg.  These subreg expressions 
  13180.            are often called paradoxical.  They are used in cases where we want 
  13181.            to refer to an object in a wider mode but do not care what value the 
  13182.            additional bits have.  The reload pass ensures that paradoxical 
  13183.            references are only made to hard registers. 
  13184.  
  13185.            The other use of subreg is to extract the individual registers of a 
  13186.            multi-register value.  Machine modes such as DImode and TImode can 
  13187.            indicate values longer than a word, values which usually require two 
  13188.            or more consecutive registers.  To access one of the registers, use 
  13189.            a subreg with mode SImode and a wordnum that says which register. 
  13190.  
  13191.            Storing in a non-paradoxical subreg has undefined results for bits 
  13192.            belonging to the same word as the subreg.  This laxity makes it 
  13193.            easier to generate efficient code for such instructions.  To 
  13194.            represent an instruction that preserves all the bits outside of 
  13195.            those in the subreg, use strict_low_part around the subreg. 
  13196.  
  13197.            The compilation parameter WORDS_BIG_ENDIAN, if set to 1, says that 
  13198.            word number zero is the most significant part; otherwise, it is the 
  13199.            least significant part. 
  13200.  
  13201.            Between the combiner pass and the reload pass, it is possible to 
  13202.            have a paradoxical subreg which contains a mem instead of a reg as 
  13203.            its first operand.  After the reload pass, it is also possible to 
  13204.            have a non-paradoxical subreg which contains a mem; this usually 
  13205.            occurs when the mem is a stack slot which replaced a pseudo 
  13206.            register. 
  13207.  
  13208.            Note that it is not valid to access a DFmode value in SFmode using a 
  13209.            subreg.  On some machines the most significant part of a DFmode 
  13210.            value does not have the same format as a single-precision floating 
  13211.            value. 
  13212.  
  13213.            It is also not valid to access a single word of a multi-word value 
  13214.            in a hard register when less registers can hold the value than would 
  13215.            be expected from its size.  For example, some 32-bit machines have 
  13216.            floating-point registers that can hold an entire DFmode value. If 
  13217.            register 10 were such a register (subreg:SI (reg:DF 10) 1) would be 
  13218.            invalid because there is no way to convert that reference to a 
  13219.            single machine register.  The reload pass prevents subreg 
  13220.            expressions such as these from being formed. 
  13221.  
  13222.            The first operand of a subreg expression is customarily accessed 
  13223.            with the SUBREG_REG macro and the second operand is customarily 
  13224.            accessed with the SUBREG_WORD macro. 
  13225.  
  13226.  (scratch:m) 
  13227.            This represents a scratch register that will be required for the 
  13228.            execution of a single instruction and not used subsequently.  It is 
  13229.            converted into a reg by either the local register allocator or the 
  13230.            reload pass. 
  13231.  
  13232.            scratch is usually present inside a clobber operation (see Side 
  13233.            Effects). 
  13234.  
  13235.  (cc0) 
  13236.            This refers to the machine's condition code register.  It has no 
  13237.            operands and may not have a machine mode.  There are two ways to use 
  13238.            it: 
  13239.  
  13240.                To stand for a complete set of condition code flags.  This is 
  13241.                 best on most machines, where each comparison sets the entire 
  13242.                 series of flags. 
  13243.  
  13244.                 With this technique, (cc0) may be validly used in only two 
  13245.                 contexts: as the destination of an assignment (in test and 
  13246.                 compare instructions) and in comparison operators comparing 
  13247.                 against zero (const_int with value zero; that is to say, 
  13248.                 const0_rtx). 
  13249.  
  13250.                To stand for a single flag that is the result of a single 
  13251.                 condition. This is useful on machines that have only a single 
  13252.                 flag bit, and in which comparison instructions must specify the 
  13253.                 condition to test. 
  13254.  
  13255.                 With this technique, (cc0) may be validly used in only two 
  13256.                 contexts: as the destination of an assignment (in test and 
  13257.                 compare instructions) where the source is a comparison 
  13258.                 operator, and as the first operand of if_then_else (in a 
  13259.                 conditional branch). 
  13260.  
  13261.            There is only one expression object of code cc0; it is the value of 
  13262.            the variable cc0_rtx.  Any attempt to create an expression of code 
  13263.            cc0 will return cc0_rtx. 
  13264.  
  13265.            Instructions can set the condition code implicitly.  On many 
  13266.            machines, nearly all instructions set the condition code based on 
  13267.            the value that they compute or store.  It is not necessary to record 
  13268.            these actions explicitly in the RTL because the machine description 
  13269.            includes a prescription for recognizing the instructions that do so 
  13270.            (by means of the macro NOTICE_UPDATE_CC).  See Condition Code.  Only 
  13271.            instructions whose sole purpose is to set the condition code, and 
  13272.            instructions that use the condition code, need mention (cc0). 
  13273.  
  13274.            On some machines, the condition code register is given a register 
  13275.            number and a reg is used instead of (cc0).  This is usually the 
  13276.            preferable approach if only a small subset of instructions modify 
  13277.            the condition code.  Other machines store condition codes in general 
  13278.            registers; in such cases a pseudo register should be used. 
  13279.  
  13280.            Some machines, such as the Sparc and RS/6000, have two sets of 
  13281.            arithmetic instructions, one that sets and one that does not set the 
  13282.            condition code.  This is best handled by normally generating the 
  13283.            instruction that does not set the condition code, and making a 
  13284.            pattern that both performs the arithmetic and sets the condition 
  13285.            code register (which would not be (cc0) in this case).  For 
  13286.            examples, search for `addcc' and `andcc' in `sparc.md'. 
  13287.  
  13288.  (pc) 
  13289.            This represents the machine's program counter.  It has no operands 
  13290.            and may not have a machine mode.  (pc) may be validly used only in 
  13291.            certain specific contexts in jump instructions. 
  13292.  
  13293.            There is only one expression object of code pc; it is the value of 
  13294.            the variable pc_rtx.  Any attempt to create an expression of code pc 
  13295.            will return pc_rtx. 
  13296.  
  13297.            All instructions that do not jump alter the program counter 
  13298.            implicitly by incrementing it, but there is no need to mention this 
  13299.            in the RTL. 
  13300.  
  13301.  (mem:m addr) 
  13302.            This RTX represents a reference to main memory at an address 
  13303.            represented by the expression addr.  m specifies how large a unit of 
  13304.            memory is accessed. 
  13305.  
  13306.  
  13307. ΓòÉΓòÉΓòÉ 19.7. RTL Expressions for Arithmetic ΓòÉΓòÉΓòÉ
  13308.  
  13309. Unless otherwise specified, all the operands of arithmetic expressions must be 
  13310. valid for mode m.  An operand is valid for mode m if it has mode m, or if it is 
  13311. a const_int or const_double and m is a mode of class MODE_INT. 
  13312.  
  13313. For commutative binary operations, constants should be placed in the second 
  13314. operand. 
  13315.  
  13316.  (plus:m x y) 
  13317.            Represents the sum of the values represented by x and y carried out 
  13318.            in machine mode m. 
  13319.  
  13320.  (lo_sum:m x y) 
  13321.            Like plus, except that it represents that sum of x and the low-order 
  13322.            bits of y.  The number of low order bits is machine-dependent but is 
  13323.            normally the number of bits in a Pmode item minus the number of bits 
  13324.            set by the high code (see Constants). 
  13325.  
  13326.            m should be Pmode. 
  13327.  
  13328.  (minus:m x y) 
  13329.            Like plus but represents subtraction. 
  13330.  
  13331.  (compare:m x y) 
  13332.            Represents the result of subtracting y from x for purposes of 
  13333.            comparison.  The result is computed without overflow, as if with 
  13334.            infinite precision. 
  13335.  
  13336.            Of course, machines can't really subtract with infinite precision. 
  13337.            However, they can pretend to do so when only the sign of the result 
  13338.            will be used, which is the case when the result is stored in the 
  13339.            condition code.  And that is the only way this kind of expression 
  13340.            may validly be used: as a value to be stored in the condition codes. 
  13341.  
  13342.            The mode m is not related to the modes of x and y, but instead is 
  13343.            the mode of the condition code value.  If (cc0) is used, it is 
  13344.            VOIDmode.  Otherwise it is some mode in class MODE_CC, often CCmode. 
  13345.            See Condition Code. 
  13346.  
  13347.            Normally, x and y must have the same mode.  Otherwise, compare is 
  13348.            valid only if the mode of x is in class MODE_INT and y is a 
  13349.            const_int or const_double with mode VOIDmode.  The mode of x 
  13350.            determines what mode the comparison is to be done in; thus it must 
  13351.            not be VOIDmode. 
  13352.  
  13353.            If one of the operands is a constant, it should be placed in the 
  13354.            second operand and the comparison code adjusted as appropriate. 
  13355.  
  13356.            A compare specifying two VOIDmode constants is not valid since there 
  13357.            is no way to know in what mode the comparison is to be performed; 
  13358.            the comparison must either be folded during the compilation or the 
  13359.            first operand must be loaded into a register while its mode is still 
  13360.            known. 
  13361.  
  13362.  (neg:m x) 
  13363.            Represents the negation (subtraction from zero) of the value 
  13364.            represented by x, carried out in mode m. 
  13365.  
  13366.  (mult:m x y) 
  13367.            Represents the signed product of the values represented by x and y 
  13368.            carried out in machine mode m. 
  13369.  
  13370.            Some machines support a multiplication that generates a product 
  13371.            wider than the operands.  Write the pattern for this as 
  13372.  
  13373.                       (mult:m (sign_extend:m x) (sign_extend:m y))
  13374.  
  13375.            where m is wider than the modes of x and y, which need not be the 
  13376.            same. 
  13377.  
  13378.            Write patterns for unsigned widening multiplication similarly using 
  13379.            zero_extend. 
  13380.  
  13381.  (div:m x y) 
  13382.            Represents the quotient in signed division of x by y, carried out in 
  13383.            machine mode m.  If m is a floating point mode, it represents the 
  13384.            exact quotient; otherwise, the integerized quotient. 
  13385.  
  13386.            Some machines have division instructions in which the operands and 
  13387.            quotient widths are not all the same; you should represent such 
  13388.            instructions using truncate and sign_extend as in, 
  13389.  
  13390.                       (truncate:m1 (div:m2 x (sign_extend:m2 y)))
  13391.  
  13392.  (udiv:m x y) 
  13393.            Like div but represents unsigned division. 
  13394.  
  13395.  (mod:m x y) 
  13396.  (umod:m x y) 
  13397.            Like div and udiv but represent the remainder instead of the 
  13398.            quotient. 
  13399.  
  13400.  (smin:m x y) 
  13401.  (smax:m x y) 
  13402.            Represents the smaller (for smin) or larger (for smax) of x and y, 
  13403.            interpreted as signed integers in mode m. 
  13404.  
  13405.  (umin:m x y) 
  13406.  (umax:m x y) 
  13407.            Like smin and smax, but the values are interpreted as unsigned 
  13408.            integers. 
  13409.  
  13410.  (not:m x) 
  13411.            Represents the bitwise complement of the value represented by x, 
  13412.            carried out in mode m, which must be a fixed-point machine mode. 
  13413.  
  13414.  (and:m x y) 
  13415.            Represents the bitwise logical-and of the values represented by x 
  13416.            and y, carried out in machine mode m, which must be a fixed-point 
  13417.            machine mode. 
  13418.  
  13419.  (ior:m x y) 
  13420.            Represents the bitwise inclusive-or of the values represented by x 
  13421.            and y, carried out in machine mode m, which must be a fixed-point 
  13422.            mode. 
  13423.  
  13424.  (xor:m x y) 
  13425.            Represents the bitwise exclusive-or of the values represented by x 
  13426.            and y, carried out in machine mode m, which must be a fixed-point 
  13427.            mode. 
  13428.  
  13429.  (ashift:m x c) 
  13430.            Represents the result of arithmetically shifting x left by c places. 
  13431.            x have mode m, a fixed-point machine mode.  c be a fixed-point mode 
  13432.            or be a constant with mode VOIDmode; which mode is determined by the 
  13433.            mode called for in the machine description entry for the left-shift 
  13434.            instruction.  For example, on the Vax, the mode of c is QImode 
  13435.            regardless of m. 
  13436.  
  13437.  (lshiftrt:m x c) 
  13438.  (ashiftrt:m x c) 
  13439.            Like ashift but for right shift.  Unlike the case for left shift, 
  13440.            these two operations are distinct. 
  13441.  
  13442.  (rotate:m x c) 
  13443.  (rotatert:m x c) 
  13444.            Similar but represent left and right rotate.  If c is a constant, 
  13445.            use rotate. 
  13446.  
  13447.  (abs:m x) 
  13448.            Represents the absolute value of x, computed in mode m. 
  13449.  
  13450.  (sqrt:m x) 
  13451.            Represents the square root of x, computed in mode m. Most often m 
  13452.            will be a floating point mode. 
  13453.  
  13454.  (ffs:m x) 
  13455.            Represents one plus the index of the least significant 1-bit in x, 
  13456.            represented as an integer of mode m.  (The value is zero if x is 
  13457.            zero.)  The mode of x need not be m; depending on the target 
  13458.            machine, various mode combinations may be valid. 
  13459.  
  13460.  
  13461. ΓòÉΓòÉΓòÉ 19.8. Comparison Operations ΓòÉΓòÉΓòÉ
  13462.  
  13463. Comparison operators test a relation on two operands and are considered to 
  13464. represent a machine-dependent nonzero value described by, but not necessarily 
  13465. equal to, STORE_FLAG_VALUE (see Misc) if the relation holds, or zero if it does 
  13466. not.  The mode of the comparison operation is independent of the mode of the 
  13467. data being compared.  If the comparison operation is being tested (e.g., the 
  13468. first operand of an if_then_else), the mode must be VOIDmode. If the comparison 
  13469. operation is producing data to be stored in some variable, the mode must be in 
  13470. class MODE_INT.  All comparison operations producing data must use the same 
  13471. mode, which is machine-specific. 
  13472.  
  13473. There are two ways that comparison operations may be used.  The comparison 
  13474. operators may be used to compare the condition codes (cc0) against zero, as in 
  13475. (eq (cc0) (const_int 0)).  Such a construct actually refers to the result of 
  13476. the preceding instruction in which the condition codes were set.  The 
  13477. instructing setting the condition code must be adjacent to the instruction 
  13478. using the condition code; only note insns may separate them. 
  13479.  
  13480. Alternatively, a comparison operation may directly compare two data objects. 
  13481. The mode of the comparison is determined by the operands; they must both be 
  13482. valid for a common machine mode.  A comparison with both operands constant 
  13483. would be invalid as the machine mode could not be deduced from it, but such a 
  13484. comparison should never exist in RTL due to constant folding. 
  13485.  
  13486. In the example above, if (cc0) were last set to (compare x y), the comparison 
  13487. operation is identical to (eq x y).  Usually only one style of comparisons is 
  13488. supported on a particular machine, but the combine pass will try to merge the 
  13489. operations to produce the eq shown in case it exists in the context of the 
  13490. particular insn involved. 
  13491.  
  13492. Inequality comparisons come in two flavors, signed and unsigned.  Thus, there 
  13493. are distinct expression codes gt and gtu for signed and unsigned greater-than. 
  13494. These can produce different results for the same pair of integer values: for 
  13495. example, 1 is signed greater-than -1 but not unsigned greater-than, because -1 
  13496. when regarded as unsigned is actually 0xffffffff which is greater than 1. 
  13497.  
  13498. The signed comparisons are also used for floating point values.  Floating point 
  13499. comparisons are distinguished by the machine modes of the operands. 
  13500.  
  13501.  (eq:m x y) 
  13502.            1 if the values represented by x and y are equal, otherwise 0. 
  13503.  
  13504.  (ne:m x y) 
  13505.            1 if the values represented by x and y are not equal, otherwise 0. 
  13506.  
  13507.  (gt:m x y) 
  13508.            1 if the x is greater than y.  If they are fixed-point, the 
  13509.            comparison is done in a signed sense. 
  13510.  
  13511.  (gtu:m x y) 
  13512.            Like gt but does unsigned comparison, on fixed-point numbers only. 
  13513.  
  13514.  (lt:m x y) 
  13515.  (ltu:m x y) 
  13516.            Like gt and gtu but test for ``less than''. 
  13517.  
  13518.  (ge:m x y) 
  13519.  (geu:m x y) 
  13520.            Like gt and gtu but test for ``greater than or equal''. 
  13521.  
  13522.  (le:m x y) 
  13523.  (leu:m x y) 
  13524.            Like gt and gtu but test for ``less than or equal''. 
  13525.  
  13526.  (if_then_else cond then else) 
  13527.            This is not a comparison operation but is listed here because it is 
  13528.            always used in conjunction with a comparison operation.  To be 
  13529.            precise, cond is a comparison expression.  This expression 
  13530.            represents a choice, according to cond, between the value 
  13531.            represented by then and the one represented by else. 
  13532.  
  13533.            On most machines, if_then_else expressions are valid only to express 
  13534.            conditional jumps. 
  13535.  
  13536.  (cond [test1 value1 test2 value2 ...] default) 
  13537.            Similar to if_then_else, but more general.  Each of test1, test2, 
  13538.            ... is performed in turn.  The result of this expression is the 
  13539.            value corresponding to the first non-zero test, or default if none 
  13540.            of the tests are non-zero expressions. 
  13541.  
  13542.            This is currently not valid for instruction patterns and is 
  13543.            supported only for insn attributes.  See Insn Attributes. 
  13544.  
  13545.  
  13546. ΓòÉΓòÉΓòÉ 19.9. Bit Fields ΓòÉΓòÉΓòÉ
  13547.  
  13548. Special expression codes exist to represent bitfield instructions. These types 
  13549. of expressions are lvalues in RTL; they may appear on the left side of an 
  13550. assignment, indicating insertion of a value into the specified bit field. 
  13551.  
  13552.  (sign_extract:m loc size pos) 
  13553.            This represents a reference to a sign-extended bit field contained 
  13554.            or starting in loc (a memory or register reference).  The bit field 
  13555.            is size bits wide and starts at bit pos.  The compilation option 
  13556.            BITS_BIG_ENDIAN says which end of the memory unit pos counts from. 
  13557.  
  13558.            If loc is in memory, its mode must be a single-byte integer mode. If 
  13559.            loc is in a register, the mode to use is specified by the operand of 
  13560.            the insv or extv pattern (see Standard Names) and is usually a 
  13561.            full-word integer mode. 
  13562.  
  13563.            The mode of pos is machine-specific and is also specified in the 
  13564.            insv or extv pattern. 
  13565.  
  13566.            The mode m is the same as the mode that would be used for loc if it 
  13567.            were a register. 
  13568.  
  13569.  (zero_extract:m loc size pos) 
  13570.            Like sign_extract but refers to an unsigned or zero-extended bit 
  13571.            field.  The same sequence of bits are extracted, but they are filled 
  13572.            to an entire word with zeros instead of by sign-extension. 
  13573.  
  13574.  
  13575. ΓòÉΓòÉΓòÉ 19.10. Conversions ΓòÉΓòÉΓòÉ
  13576.  
  13577. All conversions between machine modes must be represented by explicit 
  13578. conversion operations.  For example, an expression which is the sum of a byte 
  13579. and a full word cannot be written as (plus:SI (reg:QI 34) (reg:SI 80)) because 
  13580. the plus operation requires two operands of the same machine mode. Therefore, 
  13581. the byte-sized operand is enclosed in a conversion operation, as in 
  13582.  
  13583. (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
  13584.  
  13585. The conversion operation is not a mere placeholder, because there may be more 
  13586. than one way of converting from a given starting mode to the desired final 
  13587. mode.  The conversion operation code says how to do it. 
  13588.  
  13589. For all conversion operations, x must not be VOIDmode because the mode in which 
  13590. to do the conversion would not be known. The conversion must either be done at 
  13591. compile-time or x must be placed into a register. 
  13592.  
  13593.  (sign_extend:m x) 
  13594.            Represents the result of sign-extending the value x to machine mode 
  13595.            m.  m must be a fixed-point mode and x a fixed-point value of a mode 
  13596.            narrower than m. 
  13597.  
  13598.  (zero_extend:m x) 
  13599.            Represents the result of zero-extending the value x to machine mode 
  13600.            m.  m must be a fixed-point mode and x a fixed-point value of a mode 
  13601.            narrower than m. 
  13602.  
  13603.  (float_extend:m x) 
  13604.            Represents the result of extending the value x to machine mode m.  m 
  13605.            must be a floating point mode and x a floating point value of a mode 
  13606.            narrower than m. 
  13607.  
  13608.  (truncate:m x) 
  13609.            Represents the result of truncating the value x to machine mode m. 
  13610.            m must be a fixed-point mode and x a fixed-point value of a mode 
  13611.            wider than m. 
  13612.  
  13613.  (float_truncate:m x) 
  13614.            Represents the result of truncating the value x to machine mode m. 
  13615.            m must be a floating point mode and x a floating point value of a 
  13616.            mode wider than m. 
  13617.  
  13618.  (float:m x) 
  13619.            Represents the result of converting fixed point value x, regarded as 
  13620.            signed, to floating point mode m. 
  13621.  
  13622.  (unsigned_float:m x) 
  13623.            Represents the result of converting fixed point value x, regarded as 
  13624.            unsigned, to floating point mode m. 
  13625.  
  13626.  (fix:m x) 
  13627.            When m is a fixed point mode, represents the result of converting 
  13628.            floating point value x to mode m, regarded as signed.  How rounding 
  13629.            is done is not specified, so this operation may be used validly in 
  13630.            compiling C code only for integer-valued operands. 
  13631.  
  13632.  (unsigned_fix:m x) 
  13633.            Represents the result of converting floating point value x to fixed 
  13634.            point mode m, regarded as unsigned.  How rounding is done is not 
  13635.            specified. 
  13636.  
  13637.  (fix:m x) 
  13638.            When m is a floating point mode, represents the result of converting 
  13639.            floating point value x (valid for mode m) to an integer, still 
  13640.            represented in floating point mode m, by rounding towards zero. 
  13641.  
  13642.  
  13643. ΓòÉΓòÉΓòÉ 19.11. Declarations ΓòÉΓòÉΓòÉ
  13644.  
  13645. Declaration expression codes do not represent arithmetic operations but rather 
  13646. state assertions about their operands. 
  13647.  
  13648.  (strict_low_part (subreg:m (reg:n r) 0)) 
  13649.            This expression code is used in only one context: as the destination 
  13650.            operand of a set expression.  In addition, the operand of this 
  13651.            expression must be a non-paradoxical subreg expression. 
  13652.  
  13653.            The presence of strict_low_part says that the part of the register 
  13654.            which is meaningful in mode n, but is not part of mode m, is not to 
  13655.            be altered.  Normally, an assignment to such a subreg is allowed to 
  13656.            have undefined effects on the rest of the register when m is less 
  13657.            than a word. 
  13658.  
  13659.  
  13660. ΓòÉΓòÉΓòÉ 19.12. Side Effect Expressions ΓòÉΓòÉΓòÉ
  13661.  
  13662. The expression codes described so far represent values, not actions. But 
  13663. machine instructions never produce values; they are meaningful only for their 
  13664. side effects on the state of the machine.  Special expression codes are used to 
  13665. represent side effects. 
  13666.  
  13667. The body of an instruction is always one of these side effect codes; the codes 
  13668. described above, which represent values, appear only as the operands of these. 
  13669.  
  13670.  (set lval x) 
  13671.            Represents the action of storing the value of x into the place 
  13672.            represented by lval.  lval must be an expression representing a 
  13673.            place that can be stored in: reg (or subreg or strict_low_part), 
  13674.            mem, pc or cc0. 
  13675.  
  13676.            If lval is a reg, subreg or mem, it has a machine mode; then x must 
  13677.            be valid for that mode. 
  13678.  
  13679.            If lval is a reg whose machine mode is less than the full width of 
  13680.            the register, then it means that the part of the register specified 
  13681.            by the machine mode is given the specified value and the rest of the 
  13682.            register receives an undefined value.  Likewise, if lval is a subreg 
  13683.            whose machine mode is narrower than the mode of the register, the 
  13684.            rest of the register can be changed in an undefined way. 
  13685.  
  13686.            If lval is a strict_low_part of a subreg, then the part of the 
  13687.            register specified by the machine mode of the subreg is given the 
  13688.            value x and the rest of the register is not changed. 
  13689.  
  13690.            If lval is (cc0), it has no machine mode, and x may be either a 
  13691.            compare expression or a value that may have any mode. The latter 
  13692.            case represents a ``test'' instruction.  The expression (set (cc0) 
  13693.            (reg:m n)) is equivalent to (set (cc0) (compare (reg:m n) (const_int 
  13694.            0))). Use the former expression to save space during the 
  13695.            compilation. 
  13696.  
  13697.            If lval is (pc), we have a jump instruction, and the possibilities 
  13698.            for x are very limited.  It may be a label_ref expression 
  13699.            (unconditional jump).  It may be an if_then_else (conditional jump), 
  13700.            in which case either the second or the third operand must be (pc) 
  13701.            (for the case which does not jump) and the other of the two must be 
  13702.            a label_ref (for the case which does jump).  x may also be a mem or 
  13703.            (plus:SI (pc) y), where y may be a reg or a mem; these unusual 
  13704.            patterns are used to represent jumps through branch tables. 
  13705.  
  13706.            If lval is neither (cc0) nor (pc), the mode of lval must not be 
  13707.            VOIDmode and the mode of x must be valid for the mode of lval. 
  13708.  
  13709.            lval is customarily accessed with the SET_DEST macro and x with the 
  13710.            SET_SRC macro. 
  13711.  
  13712.  (return) 
  13713.            As the sole expression in a pattern, represents a return from the 
  13714.            current function, on machines where this can be done with one 
  13715.            instruction, such as Vaxes.  On machines where a multi-instruction 
  13716.            ``epilogue'' must be executed in order to return from the function, 
  13717.            returning is done by jumping to a label which precedes the epilogue, 
  13718.            and the return expression code is never used. 
  13719.  
  13720.            Inside an if_then_else expression, represents the value to be placed 
  13721.            in pc to return to the caller. 
  13722.  
  13723.            Note that an insn pattern of (return) is logically equivalent to 
  13724.            (set (pc) (return)), but the latter form is never used. 
  13725.  
  13726.  (call function nargs) 
  13727.            Represents a function call.  function is a mem expression whose 
  13728.            address is the address of the function to be called. nargs is an 
  13729.            expression which can be used for two purposes: on some machines it 
  13730.            represents the number of bytes of stack argument; on others, it 
  13731.            represents the number of argument registers. 
  13732.  
  13733.            Each machine has a standard machine mode which function must have. 
  13734.            The machine description defines macro FUNCTION_MODE to expand into 
  13735.            the requisite mode name.  The purpose of this mode is to specify 
  13736.            what kind of addressing is allowed, on machines where the allowed 
  13737.            kinds of addressing depend on the machine mode being addressed. 
  13738.  
  13739.  (clobber x) 
  13740.            Represents the storing or possible storing of an unpredictable, 
  13741.            undescribed value into x, which must be a reg, scratch or mem 
  13742.            expression. 
  13743.  
  13744.            One place this is used is in string instructions that store standard 
  13745.            values into particular hard registers.  It may not be worth the 
  13746.            trouble to describe the values that are stored, but it is essential 
  13747.            to inform the compiler that the registers will be altered, lest it 
  13748.            attempt to keep data in them across the string instruction. 
  13749.  
  13750.            If x is (mem:BLK (const_int 0)), it means that all memory locations 
  13751.            must be presumed clobbered. 
  13752.  
  13753.            Note that the machine description classifies certain hard registers 
  13754.            as ``call-clobbered''.  All function call instructions are assumed 
  13755.            by default to clobber these registers, so there is no need to use 
  13756.            clobber expressions to indicate this fact.  Also, each function call 
  13757.            is assumed to have the potential to alter any memory location, 
  13758.            unless the function is declared const. 
  13759.  
  13760.            If the last group of expressions in a parallel are each a clobber 
  13761.            expression whose arguments are reg or match_scratch (see RTL 
  13762.            Template) expressions, the combiner phase can add the appropriate 
  13763.            clobber expressions to an insn it has constructed when doing so will 
  13764.            cause a pattern to be matched. 
  13765.  
  13766.            This feature can be used, for example, on a machine that whose 
  13767.            multiply and add instructions don't use an MQ register but which has 
  13768.            an add-accumulate instruction that does clobber the MQ register. 
  13769.            Similarly, a combined instruction might require a temporary register 
  13770.            while the constituent instructions might not. 
  13771.  
  13772.            When a clobber expression for a register appears inside a parallel 
  13773.            with other side effects, the register allocator guarantees that the 
  13774.            register is unoccupied both before and after that insn.  However, 
  13775.            the reload phase may allocate a register used for one of the inputs 
  13776.            unless the `&' constraint is specified for the selected alternative 
  13777.            (see Modifiers).  You can clobber either a specific hard register, a 
  13778.            pseudo register, or a scratch expression; in the latter two cases, 
  13779.            GNU CC will allocate a hard register that is available there for use 
  13780.            as a temporary. 
  13781.  
  13782.            For instructions that require a temporary register, you should use 
  13783.            scratch instead of a pseudo-register because this will allow the 
  13784.            combiner phase to add the clobber when required.  You do this by 
  13785.            coding (clobber (match_scratch ...)).  If you do clobber a pseudo 
  13786.            register, use one which appears nowhere else---generate a new one 
  13787.            each time.  Otherwise, you may confuse CSE. 
  13788.  
  13789.            There is one other known use for clobbering a pseudo register in a 
  13790.            parallel: when one of the input operands of the insn is also 
  13791.            clobbered by the insn.  In this case, using the same pseudo register 
  13792.            in the clobber and elsewhere in the insn produces the expected 
  13793.            results. 
  13794.  
  13795.  (use x) 
  13796.            Represents the use of the value of x.  It indicates that the value 
  13797.            in x at this point in the program is needed, even though it may not 
  13798.            be apparent why this is so.  Therefore, the compiler will not 
  13799.            attempt to delete previous instructions whose only effect is to 
  13800.            store a value in x.  x must be a reg expression. 
  13801.  
  13802.            During the delayed branch scheduling phase, x may be an insn. This 
  13803.            indicates that x previously was located at this place in the code 
  13804.            and its data dependencies need to be taken into account.  These use 
  13805.            insns will be deleted before the delayed branch scheduling phase 
  13806.            exits. 
  13807.  
  13808.  (parallel [x0 x1 ...]) 
  13809.            Represents several side effects performed in parallel.  The square 
  13810.            brackets stand for a vector; the operand of parallel is a vector of 
  13811.            expressions.  x0, x1 and so on are individual side effect 
  13812.            expressions---expressions of code set, call, return, clobber or use. 
  13813.  
  13814.            ``In parallel'' means that first all the values used in the 
  13815.            individual side-effects are computed, and second all the actual 
  13816.            side-effects are performed.  For example, 
  13817.  
  13818.                       (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
  13819.                                  (set (mem:SI (reg:SI 1)) (reg:SI 1))])
  13820.  
  13821.            says unambiguously that the values of hard register 1 and the memory 
  13822.            location addressed by it are interchanged.  In both places where 
  13823.            (reg:SI 1) appears as a memory address it refers to the value in 
  13824.            register 1 before the execution of the insn. 
  13825.  
  13826.            It follows that it is incorrect to use parallel and expect the 
  13827.            result of one set to be available for the next one. For example, 
  13828.            people sometimes attempt to represent a jump-if-zero instruction 
  13829.            this way: 
  13830.  
  13831.                       (parallel [(set (cc0) (reg:SI 34))
  13832.                                  (set (pc) (if_then_else
  13833.                                               (eq (cc0) (const_int 0))
  13834.                                               (label_ref ...)
  13835.                                               (pc)))])
  13836.  
  13837.            But this is incorrect, because it says that the jump condition 
  13838.            depends on the condition code value before this instruction, not on 
  13839.            the new value that is set by this instruction. 
  13840.  
  13841.            Peephole optimization, which takes place together with final 
  13842.            assembly code output, can produce insns whose patterns consist of a 
  13843.            parallel whose elements are the operands needed to output the 
  13844.            resulting assembler code---often reg, mem or constant expressions. 
  13845.            This would not be well-formed RTL at any other stage in compilation, 
  13846.            but it is ok then because no further optimization remains to be 
  13847.            done. However, the definition of the macro NOTICE_UPDATE_CC, if any, 
  13848.            must deal with such insns if you define any peephole optimizations. 
  13849.  
  13850.  (sequence [insns ...]) 
  13851.            Represents a sequence of insns.  Each of the insns that appears in 
  13852.            the vector is suitable for appearing in the chain of insns, so it 
  13853.            must be an insn, jump_insn, call_insn, code_label, barrier or note. 
  13854.  
  13855.            A sequence RTX is never placed in an actual insn during RTL 
  13856.            generation.  It represents the sequence of insns that result from a 
  13857.            define_expand before those insns are passed to emit_insn to insert 
  13858.            them in the chain of insns.  When actually inserted, the individual 
  13859.            sub-insns are separated out and the sequence is forgotten. 
  13860.  
  13861.            After delay-slot scheduling is completed, an insn and all the insns 
  13862.            that reside in its delay slots are grouped together into a sequence. 
  13863.            The insn requiring the delay slot is the first insn in the vector; 
  13864.            subsequent insns are to be placed in the delay slot. 
  13865.  
  13866.            INSN_ANNULLED_BRANCH_P is set on an insn in a delay slot to indicate 
  13867.            that a branch insn should be used that will conditionally annul the 
  13868.            effect of the insns in the delay slots.  In such a case, 
  13869.            INSN_FROM_TARGET_P indicates that the insn is from the target of the 
  13870.            branch and should be executed only if the branch is taken; otherwise 
  13871.            the insn should be executed only if the branch is not taken. See 
  13872.            Delay Slots. 
  13873.  
  13874.  These expression codes appear in place of a side effect, as the body of an 
  13875.  insn, though strictly speaking they do not always describe side effects as 
  13876.  such: 
  13877.  
  13878.  (asm_input s) 
  13879.            Represents literal assembler code as described by the string s. 
  13880.  
  13881.  (unspec [operands ...] index) 
  13882.  (unspec_volatile [operands ...] index) 
  13883.            Represents a machine-specific operation on operands.  index selects 
  13884.            between multiple machine-specific operations. unspec_volatile is 
  13885.            used for volatile operations and operations that may trap; unspec is 
  13886.            used for other operations. 
  13887.  
  13888.            These codes may appear inside a pattern of an insn, inside a 
  13889.            parallel, or inside an expression. 
  13890.  
  13891.  (addr_vec:m [lr0 lr1 ...]) 
  13892.            Represents a table of jump addresses.  The vector elements lr0, 
  13893.            etc., are label_ref expressions.  The mode m specifies how much 
  13894.            space is given to each address; normally m would be Pmode. 
  13895.  
  13896.  (addr_diff_vec:m base [lr0 lr1 ...]) 
  13897.            Represents a table of jump addresses expressed as offsets from base. 
  13898.            The vector elements lr0, etc., are label_ref expressions and so is 
  13899.            base.  The mode m specifies how much space is given to each 
  13900.            address-difference. 
  13901.  
  13902.  
  13903. ΓòÉΓòÉΓòÉ 19.13. Embedded Side-Effects on Addresses ΓòÉΓòÉΓòÉ
  13904.  
  13905. Four special side-effect expression codes appear as memory addresses. 
  13906.  
  13907.  (pre_dec:m x) 
  13908.            Represents the side effect of decrementing x by a standard amount 
  13909.            and represents also the value that x has after being decremented.  x 
  13910.            must be a reg or mem, but most machines allow only a reg.  m must be 
  13911.            the machine mode for pointers on the machine in use.  The amount x 
  13912.            is decremented by is the length in bytes of the machine mode of the 
  13913.            containing memory reference of which this expression serves as the 
  13914.            address.  Here is an example of its use: 
  13915.  
  13916.                       (mem:DF (pre_dec:SI (reg:SI 39)))
  13917.  
  13918.            This says to decrement pseudo register 39 by the length of a DFmode 
  13919.            value and use the result to address a DFmode value. 
  13920.  
  13921.  (pre_inc:m x) 
  13922.            Similar, but specifies incrementing x instead of decrementing it. 
  13923.  
  13924.  (post_dec:m x) 
  13925.            Represents the same side effect as pre_dec but a different value. 
  13926.            The value represented here is the value x has before being 
  13927.            decremented. 
  13928.  
  13929.  (post_inc:m x) 
  13930.            Similar, but specifies incrementing x instead of decrementing it. 
  13931.  
  13932.  These embedded side effect expressions must be used with care.  Instruction 
  13933.  patterns may not use them.  Until the `flow' pass of the compiler, they may 
  13934.  occur only to represent pushes onto the stack.  The `flow' pass finds cases 
  13935.  where registers are incremented or decremented in one instruction and used as 
  13936.  an address shortly before or after; these cases are then transformed to use 
  13937.  pre- or post-increment or -decrement. 
  13938.  
  13939.  If a register used as the operand of these expressions is used in another 
  13940.  address in an insn, the original value of the register is used. Uses of the 
  13941.  register outside of an address are not permitted within the same insn as a use 
  13942.  in an embedded side effect expression because such insns behave differently on 
  13943.  different machines and hence must be treated as ambiguous and disallowed. 
  13944.  
  13945.  An instruction that can be represented with an embedded side effect could also 
  13946.  be represented using parallel containing an additional set to describe how the 
  13947.  address register is altered.  This is not done because machines that allow 
  13948.  these operations at all typically allow them wherever a memory address is 
  13949.  called for.  Describing them as additional parallel stores would require 
  13950.  doubling the number of entries in the machine description. 
  13951.  
  13952.  
  13953. ΓòÉΓòÉΓòÉ 19.14. Assembler Instructions as Expressions ΓòÉΓòÉΓòÉ
  13954.  
  13955. The RTX code asm_operands represents a value produced by a user-specified 
  13956. assembler instruction.  It is used to represent an asm statement with 
  13957. arguments.  An asm statement with a single output operand, like this: 
  13958.  
  13959. asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
  13960.  
  13961. is represented using a single asm_operands RTX which represents the value that 
  13962. is stored in outputvar: 
  13963.  
  13964. (set rtx-for-outputvar
  13965.      (asm_operands "foo %1,%2,%0" "a" 0
  13966.                    [rtx-for-addition-result rtx-for-*z]
  13967.                    [(asm_input:m1 "g")
  13968.                     (asm_input:m2 "di")]))
  13969.  
  13970. Here the operands of the asm_operands RTX are the assembler template string, 
  13971. the output-operand's constraint, the index-number of the output operand among 
  13972. the output operands specified, a vector of input operand RTX's, and a vector of 
  13973. input-operand modes and constraints.  The mode m1 is the mode of the sum x+y; 
  13974. m2 is that of *z. 
  13975.  
  13976. When an asm statement has multiple output values, its insn has several such set 
  13977. RTX's inside of a parallel.  Each set contains a asm_operands; all of these 
  13978. share the same assembler template and vectors, but each contains the constraint 
  13979. for the respective output operand.  They are also distinguished by the 
  13980. output-operand index number, which is 0, 1, ... for successive output operands. 
  13981.  
  13982.  
  13983. ΓòÉΓòÉΓòÉ 19.15. Insns ΓòÉΓòÉΓòÉ
  13984.  
  13985. The RTL representation of the code for a function is a doubly-linked chain of 
  13986. objects called insns.  Insns are expressions with special codes that are used 
  13987. for no other purpose.  Some insns are actual instructions; others represent 
  13988. dispatch tables for switch statements; others represent labels to jump to or 
  13989. various sorts of declarative information. 
  13990.  
  13991. In addition to its own specific data, each insn must have a unique id-number 
  13992. that distinguishes it from all other insns in the current function (after 
  13993. delayed branch scheduling, copies of an insn with the same id-number may be 
  13994. present in multiple places in a function, but these copies will always be 
  13995. identical and will only appear inside a sequence), and chain pointers to the 
  13996. preceding and following insns.  These three fields occupy the same position in 
  13997. every insn, independent of the expression code of the insn.  They could be 
  13998. accessed with XEXP and XINT, but instead three special macros are always used: 
  13999.  
  14000.  INSN_UID (i) 
  14001.            Accesses the unique id of insn i. 
  14002.  
  14003.  PREV_INSN (i) 
  14004.            Accesses the chain pointer to the insn preceding i. If i is the 
  14005.            first insn, this is a null pointer. 
  14006.  
  14007.  NEXT_INSN (i) 
  14008.            Accesses the chain pointer to the insn following i. If i is the last 
  14009.            insn, this is a null pointer. 
  14010.  
  14011.  The first insn in the chain is obtained by calling get_insns; the last insn is 
  14012.  the result of calling get_last_insn.  Within the chain delimited by these 
  14013.  insns, the NEXT_INSN and PREV_INSN pointers must always correspond: if insn is 
  14014.  not the first insn, 
  14015.  
  14016.   NEXT_INSN (PREV_INSN (insn)) == insn
  14017.  
  14018.  is always true and if insn is not the last insn, 
  14019.  
  14020.   PREV_INSN (NEXT_INSN (insn)) == insn
  14021.  
  14022.  is always true. 
  14023.  
  14024.  After delay slot scheduling, some of the insns in the chain might be sequence 
  14025.  expressions, which contain a vector of insns.  The value of NEXT_INSN in all 
  14026.  but the last of these insns is the next insn in the vector; the value of 
  14027.  NEXT_INSN of the last insn in the vector is the same as the value of NEXT_INSN 
  14028.  for the sequence in which it is contained.  Similar rules apply for PREV_INSN. 
  14029.  
  14030.  This means that the above invariants are not necessarily true for insns inside 
  14031.  sequence expressions.  Specifically, if insn is the first insn in a sequence, 
  14032.  NEXT_INSN (PREV_INSN (insn)) is the insn containing the sequence expression, 
  14033.  as is the value of PREV_INSN (NEXT_INSN (insn)) is insn is the last insn in 
  14034.  the sequence expression.  You can use these expressions to find the containing 
  14035.  sequence expression. 
  14036.  
  14037.  Every insn has one of the following six expression codes: 
  14038.  
  14039.  insn 
  14040.            The expression code insn is used for instructions that do not jump 
  14041.            and do not do function calls.  sequence expressions are always 
  14042.            contained in insns with code insn even if one of those insns should 
  14043.            jump or do function calls. 
  14044.  
  14045.            Insns with code insn have four additional fields beyond the three 
  14046.            mandatory ones listed above.  These four are described in a table 
  14047.            below. 
  14048.  
  14049.  jump_insn 
  14050.            The expression code jump_insn is used for instructions that may jump 
  14051.            (or, more generally, may contain label_ref expressions).  If there 
  14052.            is an instruction to return from the current function, it is 
  14053.            recorded as a jump_insn. 
  14054.  
  14055.            jump_insn insns have the same extra fields as insn insns, accessed 
  14056.            in the same way and in addition contain a field JUMP_LABEL which is 
  14057.            defined once jump optimization has completed. 
  14058.  
  14059.            For simple conditional and unconditional jumps, this field contains 
  14060.            the code_label to which this insn will (possibly conditionally) 
  14061.            branch.  In a more complex jump, JUMP_LABEL records one of the 
  14062.            labels that the insn refers to; the only way to find the others is 
  14063.            to scan the entire body of the insn. 
  14064.  
  14065.            Return insns count as jumps, but since they do not refer to any 
  14066.            labels, they have zero in the JUMP_LABEL field. 
  14067.  
  14068.  call_insn 
  14069.            The expression code call_insn is used for instructions that may do 
  14070.            function calls.  It is important to distinguish these instructions 
  14071.            because they imply that certain registers and memory locations may 
  14072.            be altered unpredictably. 
  14073.  
  14074.            call_insn insns have the same extra fields as insn insns, accessed 
  14075.            in the same way and in addition contain a field 
  14076.            CALL_INSN_FUNCTION_USAGE, which contains a list (chain of expr_list 
  14077.            expressions) containing use and clobber expressions that denote hard 
  14078.            registers used or clobbered by the called function.  A register 
  14079.            specified in a clobber in this list is modified after the execution 
  14080.            of the call_insn, while a register in a clobber in the body of the 
  14081.            call_insn is clobbered before the insn completes execution.  clobber 
  14082.            expressions in this list augment registers specified in 
  14083.            CALL_USED_REGISTERS (see Register Basics). 
  14084.  
  14085.  code_label 
  14086.            A code_label insn represents a label that a jump insn can jump to. 
  14087.            It contains two special fields of data in addition to the three 
  14088.            standard ones.  CODE_LABEL_NUMBER is used to hold the label number, 
  14089.            a number that identifies this label uniquely among all the labels in 
  14090.            the compilation (not just in the current function). Ultimately, the 
  14091.            label is represented in the assembler output as an assembler label, 
  14092.            usually of the form `Ln' where n is the label number. 
  14093.  
  14094.            When a code_label appears in an RTL expression, it normally appears 
  14095.            within a label_ref which represents the address of the label, as a 
  14096.            number. 
  14097.  
  14098.            The field LABEL_NUSES is only defined once the jump optimization 
  14099.            phase is completed and contains the number of times this label is 
  14100.            referenced in the current function. 
  14101.  
  14102.  barrier 
  14103.            Barriers are placed in the instruction stream when control cannot 
  14104.            flow past them.  They are placed after unconditional jump 
  14105.            instructions to indicate that the jumps are unconditional and after 
  14106.            calls to volatile functions, which do not return (e.g., exit). They 
  14107.            contain no information beyond the three standard fields. 
  14108.  
  14109.  note 
  14110.            note insns are used to represent additional debugging and 
  14111.            declarative information.  They contain two nonstandard fields, an 
  14112.            integer which is accessed with the macro NOTE_LINE_NUMBER and a 
  14113.            string accessed with NOTE_SOURCE_FILE. 
  14114.  
  14115.            If NOTE_LINE_NUMBER is positive, the note represents the position of 
  14116.            a source line and NOTE_SOURCE_FILE is the source file name that the 
  14117.            line came from.  These notes control generation of line number data 
  14118.            in the assembler output. 
  14119.  
  14120.            Otherwise, NOTE_LINE_NUMBER is not really a line number but a code 
  14121.            with one of the following values (and NOTE_SOURCE_FILE must contain 
  14122.            a null pointer): 
  14123.  
  14124.            NOTE_INSN_DELETED 
  14125.                           Such a note is completely ignorable.  Some passes of 
  14126.                           the compiler delete insns by altering them into notes 
  14127.                           of this kind. 
  14128.  
  14129.            NOTE_INSN_BLOCK_BEG 
  14130.            NOTE_INSN_BLOCK_END 
  14131.                           These types of notes indicate the position of the 
  14132.                           beginning and end of a level of scoping of variable 
  14133.                           names.  They control the output of debugging 
  14134.                           information. 
  14135.  
  14136.            NOTE_INSN_LOOP_BEG 
  14137.            NOTE_INSN_LOOP_END 
  14138.                           These types of notes indicate the position of the 
  14139.                           beginning and end of a while or for loop.  They 
  14140.                           enable the loop optimizer to find loops quickly. 
  14141.  
  14142.            NOTE_INSN_LOOP_CONT 
  14143.                           Appears at the place in a loop that continue 
  14144.                           statements jump to. 
  14145.  
  14146.            NOTE_INSN_LOOP_VTOP 
  14147.                           This note indicates the place in a loop where the 
  14148.                           exit test begins for those loops in which the exit 
  14149.                           test has been duplicated.  This position becomes 
  14150.                           another virtual start of the loop when considering 
  14151.                           loop invariants. 
  14152.  
  14153.            NOTE_INSN_FUNCTION_END 
  14154.                           Appears near the end of the function body, just 
  14155.                           before the label that return statements jump to (on 
  14156.                           machine where a single instruction does not suffice 
  14157.                           for returning).  This note may be deleted by jump 
  14158.                           optimization. 
  14159.  
  14160.            NOTE_INSN_SETJMP 
  14161.                           Appears following each call to setjmp or a related 
  14162.                           function. 
  14163.  
  14164.            These codes are printed symbolically when they appear in debugging 
  14165.            dumps. 
  14166.  
  14167.  The machine mode of an insn is normally VOIDmode, but some phases use the mode 
  14168.  for various purposes; for example, the reload pass sets it to HImode if the 
  14169.  insn needs reloading but not register elimination and QImode if both are 
  14170.  required.  The common subexpression elimination pass sets the mode of an insn 
  14171.  to QImode when it is the first insn in a block that has already been 
  14172.  processed. 
  14173.  
  14174.  Here is a table of the extra fields of insn, jump_insn and call_insn insns: 
  14175.  
  14176.  PATTERN (i) 
  14177.            An expression for the side effect performed by this insn.  This must 
  14178.            be one of the following codes: set, call, use, clobber, return, 
  14179.            asm_input, asm_output, addr_vec, addr_diff_vec, trap_if, unspec, 
  14180.            unspec_volatile, parallel, or sequence.  If it is a parallel, each 
  14181.            element of the parallel must be one these codes, except that 
  14182.            parallel expressions cannot be nested and addr_vec and addr_diff_vec 
  14183.            are not permitted inside a parallel expression. 
  14184.  
  14185.  INSN_CODE (i) 
  14186.            An integer that says which pattern in the machine description 
  14187.            matches this insn, or -1 if the matching has not yet been attempted. 
  14188.  
  14189.            Such matching is never attempted and this field remains -1 on an 
  14190.            insn whose pattern consists of a single use, clobber, asm_input, 
  14191.            addr_vec or addr_diff_vec expression. 
  14192.  
  14193.            Matching is also never attempted on insns that result from an asm 
  14194.            statement.  These contain at least one asm_operands expression. The 
  14195.            function asm_noperands returns a non-negative value for such insns. 
  14196.  
  14197.            In the debugging output, this field is printed as a number followed 
  14198.            by a symbolic representation that locates the pattern in the `md' 
  14199.            file as some small positive or negative offset from a named pattern. 
  14200.  
  14201.  LOG_LINKS (i) 
  14202.            A list (chain of insn_list expressions) giving information about 
  14203.            dependencies between instructions within a basic block.  Neither a 
  14204.            jump nor a label may come between the related insns. 
  14205.  
  14206.  REG_NOTES (i) 
  14207.            A list (chain of expr_list and insn_list expressions) giving 
  14208.            miscellaneous information about the insn.  It is often information 
  14209.            pertaining to the registers used in this insn. 
  14210.  
  14211.  The LOG_LINKS field of an insn is a chain of insn_list expressions.  Each of 
  14212.  these has two operands: the first is an insn, and the second is another 
  14213.  insn_list expression (the next one in the chain).  The last insn_list in the 
  14214.  chain has a null pointer as second operand.  The significant thing about the 
  14215.  chain is which insns appear in it (as first operands of insn_list 
  14216.  expressions).  Their order is not significant. 
  14217.  
  14218.  This list is originally set up by the flow analysis pass; it is a null pointer 
  14219.  until then.  Flow only adds links for those data dependencies which can be 
  14220.  used for instruction combination.  For each insn, the flow analysis pass adds 
  14221.  a link to insns which store into registers values that are used for the first 
  14222.  time in this insn.  The instruction scheduling pass adds extra links so that 
  14223.  every dependence will be represented.  Links represent data dependencies, 
  14224.  antidependencies and output dependencies; the machine mode of the link 
  14225.  distinguishes these three types: antidependencies have mode REG_DEP_ANTI, 
  14226.  output dependencies have mode REG_DEP_OUTPUT, and data dependencies have mode 
  14227.  VOIDmode. 
  14228.  
  14229.  The REG_NOTES field of an insn is a chain similar to the LOG_LINKS field but 
  14230.  it includes expr_list expressions in addition to insn_list expressions.  There 
  14231.  are several kinds of register notes, which are distinguished by the machine 
  14232.  mode, which in a register note is really understood as being an enum reg_note. 
  14233.  The first operand op of the note is data whose meaning depends on the kind of 
  14234.  note. 
  14235.  
  14236.  The macro REG_NOTE_KIND (x) returns the kind of register note.  Its 
  14237.  counterpart, the macro PUT_REG_NOTE_KIND (x, newkind) sets the register note 
  14238.  type of x to be newkind. 
  14239.  
  14240.  Register notes are of three classes: They may say something about an input to 
  14241.  an insn, they may say something about an output of an insn, or they may create 
  14242.  a linkage between two insns.  There are also a set of values that are only 
  14243.  used in LOG_LINKS. 
  14244.  
  14245.  These register notes annotate inputs to an insn: 
  14246.  
  14247.  REG_DEAD 
  14248.            The value in op dies in this insn; that is to say, altering the 
  14249.            value immediately after this insn would not affect the future 
  14250.            behavior of the program. 
  14251.  
  14252.            This does not necessarily mean that the register op has no useful 
  14253.            value after this insn since it may also be an output of the insn. 
  14254.            In such a case, however, a REG_DEAD note would be redundant and is 
  14255.            usually not present until after the reload pass, but no code relies 
  14256.            on this fact. 
  14257.  
  14258.  REG_INC 
  14259.            The register op is incremented (or decremented; at this level there 
  14260.            is no distinction) by an embedded side effect inside this insn. This 
  14261.            means it appears in a post_inc, pre_inc, post_dec or pre_dec 
  14262.            expression. 
  14263.  
  14264.  REG_NONNEG 
  14265.            The register op is known to have a nonnegative value when this insn 
  14266.            is reached.  This is used so that decrement and branch until zero 
  14267.            instructions, such as the m68k dbra, can be matched. 
  14268.  
  14269.            The REG_NONNEG note is added to insns only if the machine 
  14270.            description has a `decrement_and_branch_until_zero' pattern. 
  14271.  
  14272.  REG_NO_CONFLICT 
  14273.            This insn does not cause a conflict between op and the item being 
  14274.            set by this insn even though it might appear that it does. In other 
  14275.            words, if the destination register and op could otherwise be 
  14276.            assigned the same register, this insn does not prevent that 
  14277.            assignment. 
  14278.  
  14279.            Insns with this note are usually part of a block that begins with a 
  14280.            clobber insn specifying a multi-word pseudo register (which will be 
  14281.            the output of the block), a group of insns that each set one word of 
  14282.            the value and have the REG_NO_CONFLICT note attached, and a final 
  14283.            insn that copies the output to itself with an attached REG_EQUAL 
  14284.            note giving the expression being computed.  This block is 
  14285.            encapsulated with REG_LIBCALL and REG_RETVAL notes on the first and 
  14286.            last insns, respectively. 
  14287.  
  14288.  REG_LABEL 
  14289.            This insn uses op, a code_label, but is not a jump_insn.  The 
  14290.            presence of this note allows jump optimization to be aware that op 
  14291.            is, in fact, being used. 
  14292.  
  14293.  The following notes describe attributes of outputs of an insn: 
  14294.  
  14295.  REG_EQUIV 
  14296.  REG_EQUAL 
  14297.            This note is only valid on an insn that sets only one register and 
  14298.            indicates that that register will be equal to op at run time; the 
  14299.            scope of this equivalence differs between the two types of notes. 
  14300.            The value which the insn explicitly copies into the register may 
  14301.            look different from op, but they will be equal at run time.  If the 
  14302.            output of the single set is a strict_low_part expression, the note 
  14303.            refers to the register that is contained in SUBREG_REG of the subreg 
  14304.            expression. 
  14305.  
  14306.            For REG_EQUIV, the register is equivalent to op throughout the 
  14307.            entire function, and could validly be replaced in all its 
  14308.            occurrences by op.  (``Validly'' here refers to the data flow of the 
  14309.            program; simple replacement may make some insns invalid.)  For 
  14310.            example, when a constant is loaded into a register that is never 
  14311.            assigned any other value, this kind of note is used. 
  14312.  
  14313.            When a parameter is copied into a pseudo-register at entry to a 
  14314.            function, a note of this kind records that the register is 
  14315.            equivalent to the stack slot where the parameter was passed. 
  14316.            Although in this case the register may be set by other insns, it is 
  14317.            still valid to replace the register by the stack slot throughout the 
  14318.            function. 
  14319.  
  14320.            In the case of REG_EQUAL, the register that is set by this insn will 
  14321.            be equal to op at run time at the end of this insn but not 
  14322.            necessarily elsewhere in the function.  In this case, op is 
  14323.            typically an arithmetic expression.  For example, when a sequence of 
  14324.            insns such as a library call is used to perform an arithmetic 
  14325.            operation, this kind of note is attached to the insn that produces 
  14326.            or copies the final value. 
  14327.  
  14328.            These two notes are used in different ways by the compiler passes. 
  14329.            REG_EQUAL is used by passes prior to register allocation (such as 
  14330.            common subexpression elimination and loop optimization) to tell them 
  14331.            how to think of that value.  REG_EQUIV notes are used by register 
  14332.            allocation to indicate that there is an available substitute 
  14333.            expression (either a constant or a mem expression for the location 
  14334.            of a parameter on the stack) that may be used in place of a register 
  14335.            if insufficient registers are available. 
  14336.  
  14337.            Except for stack homes for parameters, which are indicated by a 
  14338.            REG_EQUIV note and are not useful to the early optimization passes 
  14339.            and pseudo registers that are equivalent to a memory location 
  14340.            throughout there entire life, which is not detected until later in 
  14341.            the compilation, all equivalences are initially indicated by an 
  14342.            attached REG_EQUAL note.  In the early stages of register 
  14343.            allocation, a REG_EQUAL note is changed into a REG_EQUIV note if op 
  14344.            is a constant and the insn represents the only set of its 
  14345.            destination register. 
  14346.  
  14347.            Thus, compiler passes prior to register allocation need only check 
  14348.            for REG_EQUAL notes and passes subsequent to register allocation 
  14349.            need only check for REG_EQUIV notes. 
  14350.  
  14351.  REG_UNUSED 
  14352.            The register op being set by this insn will not be used in a 
  14353.            subsequent insn.  This differs from a REG_DEAD note, which indicates 
  14354.            that the value in an input will not be used subsequently. These two 
  14355.            notes are independent; both may be present for the same register. 
  14356.  
  14357.  REG_WAS_0 
  14358.            The single output of this insn contained zero before this insn. op 
  14359.            is the insn that set it to zero.  You can rely on this note if it is 
  14360.            present and op has not been deleted or turned into a note; its 
  14361.            absence implies nothing. 
  14362.  
  14363.  These notes describe linkages between insns.  They occur in pairs: one insn 
  14364.  has one of a pair of notes that points to a second insn, which has the inverse 
  14365.  note pointing back to the first insn. 
  14366.  
  14367.  REG_RETVAL 
  14368.            This insn copies the value of a multi-insn sequence (for example, a 
  14369.            library call), and op is the first insn of the sequence (for a 
  14370.            library call, the first insn that was generated to set up the 
  14371.            arguments for the library call). 
  14372.  
  14373.            Loop optimization uses this note to treat such a sequence as a 
  14374.            single operation for code motion purposes and flow analysis uses 
  14375.            this note to delete such sequences whose results are dead. 
  14376.  
  14377.            A REG_EQUAL note will also usually be attached to this insn to 
  14378.            provide the expression being computed by the sequence. 
  14379.  
  14380.  REG_LIBCALL 
  14381.            This is the inverse of REG_RETVAL: it is placed on the first insn of 
  14382.            a multi-insn sequence, and it points to the last one. 
  14383.  
  14384.  REG_CC_SETTER 
  14385.  REG_CC_USER 
  14386.            On machines that use cc0, the insns which set and use cc0 set and 
  14387.            use cc0 are adjacent.  However, when branch delay slot filling is 
  14388.            done, this may no longer be true.  In this case a REG_CC_USER note 
  14389.            will be placed on the insn setting cc0 to point to the insn using 
  14390.            cc0 and a REG_CC_SETTER note will be placed on the insn using cc0 to 
  14391.            point to the insn setting cc0. 
  14392.  
  14393.  These values are only used in the LOG_LINKS field, and indicate the type of 
  14394.  dependency that each link represents.  Links which indicate a data dependence 
  14395.  (a read after write dependence) do not use any code, they simply have mode 
  14396.  VOIDmode, and are printed without any descriptive text. 
  14397.  
  14398.  REG_DEP_ANTI 
  14399.            This indicates an anti dependence (a write after read dependence). 
  14400.  
  14401.  REG_DEP_OUTPUT 
  14402.            This indicates an output dependence (a write after write 
  14403.            dependence). 
  14404.  
  14405.  For convenience, the machine mode in an insn_list or expr_list is printed 
  14406.  using these symbolic codes in debugging dumps. 
  14407.  
  14408.  The only difference between the expression codes insn_list and expr_list is 
  14409.  that the first operand of an insn_list is assumed to be an insn and is printed 
  14410.  in debugging dumps as the insn's unique id; the first operand of an expr_list 
  14411.  is printed in the ordinary way as an expression. 
  14412.  
  14413.  
  14414. ΓòÉΓòÉΓòÉ 19.16. RTL Representation of Function-Call Insns ΓòÉΓòÉΓòÉ
  14415.  
  14416. Insns that call subroutines have the RTL expression code call_insn. These insns 
  14417. must satisfy special rules, and their bodies must use a special RTL expression 
  14418. code, call. 
  14419.  
  14420. A call expression has two operands, as follows: 
  14421.  
  14422. (call (mem:fm addr) nbytes)
  14423.  
  14424. Here nbytes is an operand that represents the number of bytes of argument data 
  14425. being passed to the subroutine, fm is a machine mode (which must equal as the 
  14426. definition of the FUNCTION_MODE macro in the machine description) and addr 
  14427. represents the address of the subroutine. 
  14428.  
  14429. For a subroutine that returns no value, the call expression as shown above is 
  14430. the entire body of the insn, except that the insn might also contain use or 
  14431. clobber expressions. 
  14432.  
  14433. For a subroutine that returns a value whose mode is not BLKmode, the value is 
  14434. returned in a hard register.  If this register's number is r, then the body of 
  14435. the call insn looks like this: 
  14436.  
  14437. (set (reg:m r)
  14438.      (call (mem:fm addr) nbytes))
  14439.  
  14440. This RTL expression makes it clear (to the optimizer passes) that the 
  14441. appropriate register receives a useful value in this insn. 
  14442.  
  14443. When a subroutine returns a BLKmode value, it is handled by passing to the 
  14444. subroutine the address of a place to store the value. So the call insn itself 
  14445. does not ``return'' any value, and it has the same RTL form as a call that 
  14446. returns nothing. 
  14447.  
  14448. On some machines, the call instruction itself clobbers some register, for 
  14449. example to contain the return address.  call_insn insns on these machines 
  14450. should have a body which is a parallel that contains both the call expression 
  14451. and clobber expressions that indicate which registers are destroyed. 
  14452. Similarly, if the call instruction requires some register other than the stack 
  14453. pointer that is not explicitly mentioned it its RTL, a use subexpression should 
  14454. mention that register. 
  14455.  
  14456. Functions that are called are assumed to modify all registers listed in the 
  14457. configuration macro CALL_USED_REGISTERS ( see Register Basics) and, with the 
  14458. exception of const functions and library calls, to modify all of memory. 
  14459.  
  14460. Insns containing just use expressions directly precede the call_insn insn to 
  14461. indicate which registers contain inputs to the function.  Similarly, if 
  14462. registers other than those in CALL_USED_REGISTERS are clobbered by the called 
  14463. function, insns containing a single clobber follow immediately after the call 
  14464. to indicate which registers. 
  14465.  
  14466.  
  14467. ΓòÉΓòÉΓòÉ 19.17. Structure Sharing Assumptions ΓòÉΓòÉΓòÉ
  14468.  
  14469. The compiler assumes that certain kinds of RTL expressions are unique; there do 
  14470. not exist two distinct objects representing the same value. In other cases, it 
  14471. makes an opposite assumption: that no RTL expression object of a certain kind 
  14472. appears in more than one place in the containing structure. 
  14473.  
  14474. These assumptions refer to a single function; except for the RTL objects that 
  14475. describe global variables and external functions, and a few standard objects 
  14476. such as small integer constants, no RTL objects are common to two functions. 
  14477.  
  14478.      Each pseudo-register has only a single reg object to represent it, and 
  14479.       therefore only a single machine mode. 
  14480.  
  14481.      For any symbolic label, there is only one symbol_ref object referring to 
  14482.       it. 
  14483.  
  14484.      There is only one const_int expression with value 0, only one with value 
  14485.       1, and only one with value -1. Some other integer values are also stored 
  14486.       uniquely. 
  14487.  
  14488.      There is only one pc expression. 
  14489.  
  14490.      There is only one cc0 expression. 
  14491.  
  14492.      There is only one const_double expression with value 0 for each floating 
  14493.       point mode.  Likewise for values 1 and 2. 
  14494.  
  14495.      No label_ref or scratch appears in more than one place in the RTL 
  14496.       structure; in other words, it is safe to do a tree-walk of all the insns 
  14497.       in the function and assume that each time a label_ref or scratch is seen 
  14498.       it is distinct from all others that are seen. 
  14499.  
  14500.      Only one mem object is normally created for each static variable or stack 
  14501.       slot, so these objects are frequently shared in all the places they 
  14502.       appear.  However, separate but equal objects for these variables are 
  14503.       occasionally made. 
  14504.  
  14505.      When a single asm statement has multiple output operands, a distinct 
  14506.       asm_operands expression is made for each output operand. However, these 
  14507.       all share the vector which contains the sequence of input operands.  This 
  14508.       sharing is used later on to test whether two asm_operands expressions 
  14509.       come from the same statement, so all optimizations must carefully 
  14510.       preserve the sharing if they copy the vector at all. 
  14511.  
  14512.      No RTL object appears in more than one place in the RTL structure except 
  14513.       as described above.  Many passes of the compiler rely on this by assuming 
  14514.       that they can modify RTL objects in place without unwanted side-effects 
  14515.       on other insns. 
  14516.  
  14517.      During initial RTL generation, shared structure is freely introduced. 
  14518.       After all the RTL for a function has been generated, all shared structure 
  14519.       is copied by unshare_all_rtl in `emit-rtl.c', after which the above rules 
  14520.       are guaranteed to be followed. 
  14521.  
  14522.      During the combiner pass, shared structure within an insn can exist 
  14523.       temporarily.  However, the shared structure is copied before the combiner 
  14524.       is finished with the insn.  This is done by calling copy_rtx_if_shared, 
  14525.       which is a subroutine of unshare_all_rtl. 
  14526.  
  14527.  
  14528. ΓòÉΓòÉΓòÉ 19.18. Reading RTL ΓòÉΓòÉΓòÉ
  14529.  
  14530. To read an RTL object from a file, call read_rtx.  It takes one argument, a 
  14531. stdio stream, and returns a single RTL object. 
  14532.  
  14533. Reading RTL from a file is very slow.  This is not currently a problem since 
  14534. reading RTL occurs only as part of building the compiler. 
  14535.  
  14536. People frequently have the idea of using RTL stored as text in a file as an 
  14537. interface between a language front end and the bulk of GNU CC.  This idea is 
  14538. not feasible. 
  14539.  
  14540. GNU CC was designed to use RTL internally only.  Correct RTL for a given 
  14541. program is very dependent on the particular target machine.  And the RTL does 
  14542. not contain all the information about the program. 
  14543.  
  14544. The proper way to interface GNU CC to a new language front end is with the 
  14545. ``tree'' data structure.  There is no manual for this data structure, but it is 
  14546. described in the files `tree.h' and `tree.def'. 
  14547.  
  14548.  
  14549. ΓòÉΓòÉΓòÉ 20. Machine Descriptions ΓòÉΓòÉΓòÉ
  14550.  
  14551. A machine description has two parts: a file of instruction patterns (`.md' 
  14552. file) and a C header file of macro definitions. 
  14553.  
  14554. The `.md' file for a target machine contains a pattern for each instruction 
  14555. that the target machine supports (or at least each instruction that is worth 
  14556. telling the compiler about).  It may also contain comments. A semicolon causes 
  14557. the rest of the line to be a comment, unless the semicolon is inside a quoted 
  14558. string. 
  14559.  
  14560. See the next chapter for information on the C header file. 
  14561.  
  14562.  Patterns                                How to write instruction patterns. 
  14563.  Example                                 An explained example of a define_insn 
  14564.                                          pattern. 
  14565.  RTL Template                            The RTL template defines what insns 
  14566.                                          match a pattern. 
  14567.  Output Template                         The output template says how to make 
  14568.                                          assembler code from such an insn. 
  14569.  Output Statement                        For more generality, write C code to 
  14570.                                          output the assembler code. 
  14571.  Constraints                             When not all operands are general 
  14572.                                          operands. 
  14573.  Standard Names                          Names mark patterns to use for code 
  14574.                                          generation. 
  14575.  Pattern Ordering                        When the order of patterns makes a 
  14576.                                          difference. 
  14577.  Dependent Patterns                      Having one pattern may make you need 
  14578.                                          another. 
  14579.  Jump Patterns                           Special considerations for patterns 
  14580.                                          for jump insns. 
  14581.  Insn Canonicalizations                  Canonicalization of Instructions 
  14582.  Peephole Definitions                    Defining machine-specific peephole 
  14583.                                          optimizations. 
  14584.  Expander Definitions                    Generating a sequence of several RTL 
  14585.                                          insns 
  14586.               for a standard operation. 
  14587.  
  14588.  Insn Splitting                          Splitting Instructions into Multiple 
  14589.                                          Instructions 
  14590.  Insn Attributes                         Specifying the value of attributes for 
  14591.                                          generated insns. 
  14592.  
  14593.  
  14594. ΓòÉΓòÉΓòÉ 20.1. Everything about Instruction Patterns ΓòÉΓòÉΓòÉ
  14595.  
  14596. Each instruction pattern contains an incomplete RTL expression, with pieces to 
  14597. be filled in later, operand constraints that restrict how the pieces can be 
  14598. filled in, and an output pattern or C code to generate the assembler output, 
  14599. all wrapped up in a define_insn expression. 
  14600.  
  14601. A define_insn is an RTL expression containing four or five operands: 
  14602.  
  14603.    1. An optional name.  The presence of a name indicate that this instruction 
  14604.       pattern can perform a certain standard job for the RTL-generation pass of 
  14605.       the compiler.  This pass knows certain names and will use the instruction 
  14606.       patterns with those names, if the names are defined in the machine 
  14607.       description. 
  14608.  
  14609.       The absence of a name is indicated by writing an empty string where the 
  14610.       name should go.  Nameless instruction patterns are never used for 
  14611.       generating RTL code, but they may permit several simpler insns to be 
  14612.       combined later on. 
  14613.  
  14614.       Names that are not thus known and used in RTL-generation have no effect; 
  14615.       they are equivalent to no name at all. 
  14616.  
  14617.    2. The RTL template (see RTL Template) is a vector of incomplete RTL 
  14618.       expressions which show what the instruction should look like.  It is 
  14619.       incomplete because it may contain match_operand, match_operator, and 
  14620.       match_dup expressions that stand for operands of the instruction. 
  14621.  
  14622.       If the vector has only one element, that element is the template for the 
  14623.       instruction pattern.  If the vector has multiple elements, then the 
  14624.       instruction pattern is a parallel expression containing the elements 
  14625.       described. 
  14626.  
  14627.    3. A condition.  This is a string which contains a C expression that is the 
  14628.       final test to decide whether an insn body matches this pattern. 
  14629.  
  14630.       For a named pattern, the condition (if present) may not depend on the 
  14631.       data in the insn being matched, but only the target-machine-type flags. 
  14632.       The compiler needs to test these conditions during initialization in 
  14633.       order to learn exactly which named instructions are available in a 
  14634.       particular run. 
  14635.  
  14636.       For nameless patterns, the condition is applied only when matching an 
  14637.       individual insn, and only after the insn has matched the pattern's 
  14638.       recognition template.  The insn's operands may be found in the vector 
  14639.       operands. 
  14640.  
  14641.    4. The output template: a string that says how to output matching insns as 
  14642.       assembler code.  `%' in this string specifies where to substitute the 
  14643.       value of an operand.  See Output Template. 
  14644.  
  14645.       When simple substitution isn't general enough, you can specify a piece of 
  14646.       C code to compute the output.  See Output Statement. 
  14647.  
  14648.    5. Optionally, a vector containing the values of attributes for insns 
  14649.       matching this pattern.  See Insn Attributes. 
  14650.  
  14651.  
  14652. ΓòÉΓòÉΓòÉ 20.2. Example of define_insn ΓòÉΓòÉΓòÉ
  14653.  
  14654. Here is an actual example of an instruction pattern, for the 68000/68020. 
  14655.  
  14656. (define_insn "tstsi"
  14657.   [(set (cc0)
  14658.         (match_operand:SI 0 "general_operand" "rm"))]
  14659.   ""
  14660.   "*
  14661. { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
  14662.     return \"tstl %0\";
  14663.   return \"cmpl #0,%0\"; }")
  14664.  
  14665. This is an instruction that sets the condition codes based on the value of a 
  14666. general operand.  It has no condition, so any insn whose RTL description has 
  14667. the form shown may be handled according to this pattern.  The name `tstsi' 
  14668. means ``test a SImode value'' and tells the RTL generation pass that, when it 
  14669. is necessary to test such a value, an insn to do so can be constructed using 
  14670. this pattern. 
  14671.  
  14672. The output control string is a piece of C code which chooses which output 
  14673. template to return based on the kind of operand and the specific type of CPU 
  14674. for which code is being generated. 
  14675.  
  14676. `"rm"' is an operand constraint.  Its meaning is explained below. 
  14677.  
  14678.  
  14679. ΓòÉΓòÉΓòÉ 20.3. RTL Template ΓòÉΓòÉΓòÉ
  14680.  
  14681. The RTL template is used to define which insns match the particular pattern and 
  14682. how to find their operands.  For named patterns, the RTL template also says how 
  14683. to construct an insn from specified operands. 
  14684.  
  14685. Construction involves substituting specified operands into a copy of the 
  14686. template.  Matching involves determining the values that serve as the operands 
  14687. in the insn being matched.  Both of these activities are controlled by special 
  14688. expression types that direct matching and substitution of the operands. 
  14689.  
  14690.  (match_operand:m n predicate constraint) 
  14691.            This expression is a placeholder for operand number n of the insn. 
  14692.            When constructing an insn, operand number n will be substituted at 
  14693.            this point.  When matching an insn, whatever appears at this 
  14694.            position in the insn will be taken as operand number n; but it must 
  14695.            satisfy predicate or this instruction pattern will not match at all. 
  14696.  
  14697.            Operand numbers must be chosen consecutively counting from zero in 
  14698.            each instruction pattern.  There may be only one match_operand 
  14699.            expression in the pattern for each operand number.  Usually operands 
  14700.            are numbered in the order of appearance in match_operand 
  14701.            expressions. 
  14702.  
  14703.            predicate is a string that is the name of a C function that accepts 
  14704.            two arguments, an expression and a machine mode.  During matching, 
  14705.            the function will be called with the putative operand as the 
  14706.            expression and m as the mode argument (if m is not specified, 
  14707.            VOIDmode will be used, which normally causes predicate to accept any 
  14708.            mode).  If it returns zero, this instruction pattern fails to match. 
  14709.            predicate may be an empty string; then it means no test is to be 
  14710.            done on the operand, so anything which occurs in this position is 
  14711.            valid. 
  14712.  
  14713.            Most of the time, predicate will reject modes other than m---but not 
  14714.            always.  For example, the predicate address_operand uses m as the 
  14715.            mode of memory ref that the address should be valid for. Many 
  14716.            predicates accept const_int nodes even though their mode is 
  14717.            VOIDmode. 
  14718.  
  14719.            constraint controls reloading and the choice of the best register 
  14720.            class to use for a value, as explained later (see Constraints). 
  14721.  
  14722.            People are often unclear on the difference between the constraint 
  14723.            and the predicate.  The predicate helps decide whether a given insn 
  14724.            matches the pattern.  The constraint plays no role in this decision; 
  14725.            instead, it controls various decisions in the case of an insn which 
  14726.            does match. 
  14727.  
  14728.            On CISC machines, the most common predicate is "general_operand". 
  14729.            This function checks that the putative operand is either a constant, 
  14730.            a register or a memory reference, and that it is valid for mode m. 
  14731.  
  14732.            For an operand that must be a register, predicate should be 
  14733.            "register_operand".  Using "general_operand" would be valid, since 
  14734.            the reload pass would copy any non-register operands through 
  14735.            registers, but this would make GNU CC do extra work, it would 
  14736.            prevent invariant operands (such as constant) from being removed 
  14737.            from loops, and it would prevent the register allocator from doing 
  14738.            the best possible job.  On RISC machines, it is usually most 
  14739.            efficient to allow predicate to accept only objects that the 
  14740.            constraints allow. 
  14741.  
  14742.            For an operand that must be a constant, you must be sure to either 
  14743.            use "immediate_operand" for predicate, or make the instruction 
  14744.            pattern's extra condition require a constant, or both.  You cannot 
  14745.            expect the constraints to do this work!  If the constraints allow 
  14746.            only constants, but the predicate allows something else, the 
  14747.            compiler will crash when that case arises. 
  14748.  
  14749.  (match_scratch:m n constraint) 
  14750.            This expression is also a placeholder for operand number n and 
  14751.            indicates that operand must be a scratch or reg expression. 
  14752.  
  14753.            When matching patterns, this is equivalent to 
  14754.  
  14755.                       (match_operand:m n "scratch_operand" pred)
  14756.  
  14757.            but, when generating RTL, it produces a (scratch:m) expression. 
  14758.  
  14759.            If the last few expressions in a parallel are clobber expressions 
  14760.            whose operands are either a hard register or match_scratch, the 
  14761.            combiner can add or delete them when necessary.  See Side Effects. 
  14762.  
  14763.  (match_dup n) 
  14764.            This expression is also a placeholder for operand number n. It is 
  14765.            used when the operand needs to appear more than once in the insn. 
  14766.  
  14767.            In construction, match_dup acts just like match_operand: the operand 
  14768.            is substituted into the insn being constructed.  But in matching, 
  14769.            match_dup behaves differently.  It assumes that operand number n has 
  14770.            already been determined by a match_operand appearing earlier in the 
  14771.            recognition template, and it matches only an identical-looking 
  14772.            expression. 
  14773.  
  14774.  (match_operator:m n predicate [operands...]) 
  14775.            This pattern is a kind of placeholder for a variable RTL expression 
  14776.            code. 
  14777.  
  14778.            When constructing an insn, it stands for an RTL expression whose 
  14779.            expression code is taken from that of operand n, and whose operands 
  14780.            are constructed from the patterns operands. 
  14781.  
  14782.            When matching an expression, it matches an expression if the 
  14783.            function predicate returns nonzero on that expression and the 
  14784.            patterns operands match the operands of the expression. 
  14785.  
  14786.            Suppose that the function commutative_operator is defined as 
  14787.            follows, to match any expression whose operator is one of the 
  14788.            commutative arithmetic operators of RTL and whose mode is mode: 
  14789.  
  14790.                       int
  14791.                       commutative_operator (x, mode)
  14792.                            rtx x;
  14793.                            enum machine_mode mode;
  14794.                       {
  14795.                         enum rtx_code code = GET_CODE (x);
  14796.                         if (GET_MODE (x) != mode)
  14797.                           return 0;
  14798.                         return (GET_RTX_CLASS (code) == 'c'
  14799.                                 || code == EQ || code == NE);
  14800.                       }
  14801.  
  14802.            Then the following pattern will match any RTL expression consisting 
  14803.            of a commutative operator applied to two general operands: 
  14804.  
  14805.                       (match_operator:SI 3 "commutative_operator"
  14806.                         [(match_operand:SI 1 "general_operand" "g")
  14807.                          (match_operand:SI 2 "general_operand" "g")])
  14808.  
  14809.            Here the vector [operands...] contains two patterns because the 
  14810.            expressions to be matched all contain two operands. 
  14811.  
  14812.            When this pattern does match, the two operands of the commutative 
  14813.            operator are recorded as operands 1 and 2 of the insn.  (This is 
  14814.            done by the two instances of match_operand.)  Operand 3 of the insn 
  14815.            will be the entire commutative expression: use GET_CODE 
  14816.            (operands[3]) to see which commutative operator was used. 
  14817.  
  14818.            The machine mode m of match_operator works like that of 
  14819.            match_operand: it is passed as the second argument to the predicate 
  14820.            function, and that function is solely responsible for deciding 
  14821.            whether the expression to be matched ``has'' that mode. 
  14822.  
  14823.            When constructing an insn, argument 3 of the gen-function will 
  14824.            specify the operation (i.e. the expression code) for the expression 
  14825.            to be made.  It should be an RTL expression, whose expression code 
  14826.            is copied into a new expression whose operands are arguments 1 and 2 
  14827.            of the gen-function.  The subexpressions of argument 3 are not used; 
  14828.            only its expression code matters. 
  14829.  
  14830.            When match_operator is used in a pattern for matching an insn, it 
  14831.            usually best if the operand number of the match_operator is higher 
  14832.            than that of the actual operands of the insn.  This improves 
  14833.            register allocation because the register allocator often looks at 
  14834.            operands 1 and 2 of insns to see if it can do register tying. 
  14835.  
  14836.            There is no way to specify constraints in match_operator.  The 
  14837.            operand of the insn which corresponds to the match_operator never 
  14838.            has any constraints because it is never reloaded as a whole. 
  14839.            However, if parts of its operands are matched by match_operand 
  14840.            patterns, those parts may have constraints of their own. 
  14841.  
  14842.  (match_op_dup:m n[operands...]) 
  14843.            Like match_dup, except that it applies to operators instead of 
  14844.            operands.  When constructing an insn, operand number n will be 
  14845.            substituted at this point.  But in matching, match_op_dup behaves 
  14846.            differently.  It assumes that operand number n has already been 
  14847.            determined by a match_operator appearing earlier in the recognition 
  14848.            template, and it matches only an identical-looking expression. 
  14849.  
  14850.  (match_parallel n predicate [subpat...]) 
  14851.            This pattern is a placeholder for an insn that consists of a 
  14852.            parallel expression with a variable number of elements.  This 
  14853.            expression should only appear at the top level of an insn pattern. 
  14854.  
  14855.            When constructing an insn, operand number n will be substituted at 
  14856.            this point.  When matching an insn, it matches if the body of the 
  14857.            insn is a parallel expression with at least as many elements as the 
  14858.            vector of subpat expressions in the match_parallel, if each subpat 
  14859.            matches the corresponding element of the parallel, and the function 
  14860.            predicate returns nonzero on the parallel that is the body of the 
  14861.            insn.  It is the responsibility of the predicate to validate 
  14862.            elements of the parallel beyond those listed in the match_parallel. 
  14863.  
  14864.            A typical use of match_parallel is to match load and store multiple 
  14865.            expressions, which can contain a variable number of elements in a 
  14866.            parallel.  For example, 
  14867.  
  14868.                       (define_insn ""
  14869.                         [(match_parallel 0 "load_multiple_operation"
  14870.                            [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
  14871.                                  (match_operand:SI 2 "memory_operand" "m"))
  14872.                             (use (reg:SI 179))
  14873.                             (clobber (reg:SI 179))])]
  14874.                         ""
  14875.                         "loadm 0,0,%1,%2")
  14876.  
  14877.            This example comes from `a29k.md'.  The function 
  14878.            load_multiple_operations is defined in `a29k.c' and checks that 
  14879.            subsequent elements in the parallel are the same as the set in the 
  14880.            pattern, except that they are referencing subsequent registers and 
  14881.            memory locations. 
  14882.  
  14883.            An insn that matches this pattern might look like: 
  14884.  
  14885.                       (parallel
  14886.                        [(set (reg:SI 20) (mem:SI (reg:SI 100)))
  14887.                         (use (reg:SI 179))
  14888.                         (clobber (reg:SI 179))
  14889.                         (set (reg:SI 21)
  14890.                              (mem:SI (plus:SI (reg:SI 100)
  14891.                                               (const_int 4))))
  14892.                         (set (reg:SI 22)
  14893.                              (mem:SI (plus:SI (reg:SI 100)
  14894.                                               (const_int 8))))])
  14895.  
  14896.  (match_par_dup n [subpat...]) 
  14897.            Like match_op_dup, but for match_parallel instead of match_operator. 
  14898.  
  14899.  (address (match_operand:m n "address_operand" "")) 
  14900.            This complex of expressions is a placeholder for an operand number n 
  14901.            in a ``load address'' instruction: an operand which specifies a 
  14902.            memory location in the usual way, but for which the actual operand 
  14903.            value used is the address of the location, not the contents of the 
  14904.            location. 
  14905.  
  14906.            address expressions never appear in RTL code, only in machine 
  14907.            descriptions.  And they are used only in machine descriptions that 
  14908.            do not use the operand constraint feature.  When operand constraints 
  14909.            are in use, the letter `p' in the constraint serves this purpose. 
  14910.  
  14911.            m is the machine mode of the memory location being addressed, not 
  14912.            the machine mode of the address itself.  That mode is always the 
  14913.            same on a given target machine (it is Pmode, which normally is 
  14914.            SImode), so there is no point in mentioning it; thus, no machine 
  14915.            mode is written in the address expression.  If some day support is 
  14916.            added for machines in which addresses of different kinds of objects 
  14917.            appear differently or are used differently (such as the PDP-10), 
  14918.            different formats would perhaps need different machine modes and 
  14919.            these modes might be written in the address expression. 
  14920.  
  14921.  
  14922. ΓòÉΓòÉΓòÉ 20.4. Output Templates and Operand Substitution ΓòÉΓòÉΓòÉ
  14923.  
  14924. The output template is a string which specifies how to output the assembler 
  14925. code for an instruction pattern.  Most of the template is a fixed string which 
  14926. is output literally.  The character `%' is used to specify where to substitute 
  14927. an operand; it can also be used to identify places where different variants of 
  14928. the assembler require different syntax. 
  14929.  
  14930. In the simplest case, a `%' followed by a digit n says to output operand n at 
  14931. that point in the string. 
  14932.  
  14933. `%' followed by a letter and a digit says to output an operand in an alternate 
  14934. fashion.  Four letters have standard, built-in meanings described below.  The 
  14935. machine description macro PRINT_OPERAND can define additional letters with 
  14936. nonstandard meanings. 
  14937.  
  14938. `%cdigit' can be used to substitute an operand that is a constant value without 
  14939. the syntax that normally indicates an immediate operand. 
  14940.  
  14941. `%ndigit' is like `%cdigit' except that the value of the constant is negated 
  14942. before printing. 
  14943.  
  14944. `%adigit' can be used to substitute an operand as if it were a memory 
  14945. reference, with the actual operand treated as the address.  This may be useful 
  14946. when outputting a ``load address'' instruction, because often the assembler 
  14947. syntax for such an instruction requires you to write the operand as if it were 
  14948. a memory reference. 
  14949.  
  14950. `%ldigit' is used to substitute a label_ref into a jump instruction. 
  14951.  
  14952. `%=' outputs a number which is unique to each instruction in the entire 
  14953. compilation.  This is useful for making local labels to be referred to more 
  14954. than once in a single template that generates multiple assembler instructions. 
  14955.  
  14956. `%' followed by a punctuation character specifies a substitution that does not 
  14957. use an operand.  Only one case is standard: `%%' outputs a `%' into the 
  14958. assembler code.  Other nonstandard cases can be defined in the PRINT_OPERAND 
  14959. macro.  You must also define which punctuation characters are valid with the 
  14960. PRINT_OPERAND_PUNCT_VALID_P macro. 
  14961.  
  14962. The template may generate multiple assembler instructions.  Write the text for 
  14963. the instructions, with `\;' between them. 
  14964.  
  14965. When the RTL contains two operands which are required by constraint to match 
  14966. each other, the output template must refer only to the lower-numbered operand. 
  14967. Matching operands are not always identical, and the rest of the compiler 
  14968. arranges to put the proper RTL expression for printing into the lower-numbered 
  14969. operand. 
  14970.  
  14971. One use of nonstandard letters or punctuation following `%' is to distinguish 
  14972. between different assembler languages for the same machine; for example, 
  14973. Motorola syntax versus MIT syntax for the 68000.  Motorola syntax requires 
  14974. periods in most opcode names, while MIT syntax does not.  For example, the 
  14975. opcode `movel' in MIT syntax is `move.l' in Motorola syntax.  The same file of 
  14976. patterns is used for both kinds of output syntax, but the character sequence 
  14977. `%.' is used in each place where Motorola syntax wants a period.  The 
  14978. PRINT_OPERAND macro for Motorola syntax defines the sequence to output a 
  14979. period; the macro for MIT syntax defines it to do nothing. 
  14980.  
  14981. As a special case, a template consisting of the single character # instructs 
  14982. the compiler to first split the insn, and then output the resulting 
  14983. instructions separately.  This helps eliminate redundancy in the output 
  14984. templates.  If you have a define_insn that needs to emit multiple assembler 
  14985. instructions, and there is an matching define_split already defined, then you 
  14986. can simply use # as the output template instead of writing an output template 
  14987. that emits the multiple assembler instructions. 
  14988.  
  14989. If ASSEMBLER_DIALECT is defined, you can use `{option0|option1|option2}' 
  14990. constructs in the templates.  These describe multiple variants of assembler 
  14991. language syntax. See Instruction Output. 
  14992.  
  14993.  
  14994. ΓòÉΓòÉΓòÉ 20.5. C Statements for Assembler Output ΓòÉΓòÉΓòÉ
  14995.  
  14996. Often a single fixed template string cannot produce correct and efficient 
  14997. assembler code for all the cases that are recognized by a single instruction 
  14998. pattern.  For example, the opcodes may depend on the kinds of operands; or some 
  14999. unfortunate combinations of operands may require extra machine instructions. 
  15000.  
  15001. If the output control string starts with a `@', then it is actually a series of 
  15002. templates, each on a separate line.  (Blank lines and leading spaces and tabs 
  15003. are ignored.)  The templates correspond to the pattern's constraint 
  15004. alternatives (see Multi-Alternative).  For example, if a target machine has a 
  15005. two-address add instruction `addr' to add into a register and another `addm' to 
  15006. add a register to memory, you might write this pattern: 
  15007.  
  15008. (define_insn "addsi3"
  15009.   [(set (match_operand:SI 0 "general_operand" "=r,m")
  15010.         (plus:SI (match_operand:SI 1 "general_operand" "0,0")
  15011.                  (match_operand:SI 2 "general_operand" "g,r")))]
  15012.   ""
  15013.   "@
  15014.    addr %2,%0
  15015.    addm %2,%0")
  15016.  
  15017. If the output control string starts with a `*', then it is not an output 
  15018. template but rather a piece of C program that should compute a template.  It 
  15019. should execute a return statement to return the template-string you want.  Most 
  15020. such templates use C string literals, which require doublequote characters to 
  15021. delimit them.  To include these doublequote characters in the string, prefix 
  15022. each one with `\'. 
  15023.  
  15024. The operands may be found in the array operands, whose C data type is rtx []. 
  15025.  
  15026. It is very common to select different ways of generating assembler code based 
  15027. on whether an immediate operand is within a certain range.  Be careful when 
  15028. doing this, because the result of INTVAL is an integer on the host machine.  If 
  15029. the host machine has more bits in an int than the target machine has in the 
  15030. mode in which the constant will be used, then some of the bits you get from 
  15031. INTVAL will be superfluous.  For proper results, you must carefully disregard 
  15032. the values of those bits. 
  15033.  
  15034. It is possible to output an assembler instruction and then go on to output or 
  15035. compute more of them, using the subroutine output_asm_insn.  This receives two 
  15036. arguments: a template-string and a vector of operands.  The vector may be 
  15037. operands, or it may be another array of rtx that you declare locally and 
  15038. initialize yourself. 
  15039.  
  15040. When an insn pattern has multiple alternatives in its constraints, often the 
  15041. appearance of the assembler code is determined mostly by which alternative was 
  15042. matched.  When this is so, the C code can test the variable which_alternative, 
  15043. which is the ordinal number of the alternative that was actually satisfied (0 
  15044. for the first, 1 for the second alternative, etc.). 
  15045.  
  15046. For example, suppose there are two opcodes for storing zero, `clrreg' for 
  15047. registers and `clrmem' for memory locations.  Here is how a pattern could use 
  15048. which_alternative to choose between them: 
  15049.  
  15050. (define_insn ""
  15051.   [(set (match_operand:SI 0 "general_operand" "=r,m")
  15052.         (const_int 0))]
  15053.   ""
  15054.   "*
  15055.   return (which_alternative == 0
  15056.           ? \"clrreg %0\" : \"clrmem %0\");
  15057.   ")
  15058.  
  15059. The example above, where the assembler code to generate was solely determined 
  15060. by the alternative, could also have been specified as follows, having the 
  15061. output control string start with a `@': 
  15062.  
  15063. (define_insn ""
  15064.   [(set (match_operand:SI 0 "general_operand" "=r,m")
  15065.         (const_int 0))]
  15066.   ""
  15067.   "@
  15068.    clrreg %0
  15069.    clrmem %0")
  15070.  
  15071.  
  15072. ΓòÉΓòÉΓòÉ 20.6. Operand Constraints ΓòÉΓòÉΓòÉ
  15073.  
  15074. Each match_operand in an instruction pattern can specify a constraint for the 
  15075. type of operands allowed. Constraints can say whether 
  15076.  
  15077. an operand may be in a register, and which kinds of register; whether the 
  15078. operand can be a memory reference, and which kinds of address; whether the 
  15079. operand may be an immediate constant, and which possible values it may have. 
  15080. Constraints can also require two operands to match. 
  15081.  
  15082.  Simple Constraints                      Basic use of constraints. 
  15083.  Multi-Alternative                       When an insn has two alternative 
  15084.                                          constraint-patterns. 
  15085.  Class Preferences                       Constraints guide which hard register 
  15086.                                          to put things in. 
  15087.  Modifiers                               More precise control over effects of 
  15088.                                          constraints. 
  15089.  Machine Constraints                     Existing constraints for some 
  15090.                                          particular machines. 
  15091.  No Constraints                          Describing a clean machine without 
  15092.                                          constraints. 
  15093.  
  15094.  Simple Constraints                      Basic use of constraints. 
  15095.  Multi-Alternative                       When an insn has two alternative 
  15096.                                          constraint-patterns. 
  15097.  Modifiers                               More precise control over effects of 
  15098.                                          constraints. 
  15099.  Machine Constraints                     Special constraints for some 
  15100.                                          particular machines. 
  15101.  
  15102.  
  15103. ΓòÉΓòÉΓòÉ 20.6.1. Simple Constraints ΓòÉΓòÉΓòÉ
  15104.  
  15105. The simplest kind of constraint is a string full of letters, each of which 
  15106. describes one kind of operand that is permitted.  Here are the letters that are 
  15107. allowed: 
  15108.  
  15109.  `m' 
  15110.            A memory operand is allowed, with any kind of address that the 
  15111.            machine supports in general. 
  15112.  
  15113.  `o' 
  15114.            A memory operand is allowed, but only if the address is offsettable. 
  15115.            This means that adding a small integer (actually, the width in bytes 
  15116.            of the operand, as determined by its machine mode) may be added to 
  15117.            the address and the result is also a valid memory address. 
  15118.  
  15119.            For example, an address which is constant is offsettable; so is an 
  15120.            address that is the sum of a register and a constant (as long as a 
  15121.            slightly larger constant is also within the range of address-offsets 
  15122.            supported by the machine); but an autoincrement or autodecrement 
  15123.            address is not offsettable.  More complicated indirect/indexed 
  15124.            addresses may or may not be offsettable depending on the other 
  15125.            addressing modes that the machine supports. 
  15126.  
  15127.            Note that in an output operand which can be matched by another 
  15128.            operand, the constraint letter `o' is valid only when accompanied by 
  15129.            both `<' (if the target machine has predecrement addressing) and `>' 
  15130.            (if the target machine has preincrement addressing). 
  15131.  
  15132.  `V' 
  15133.            A memory operand that is not offsettable.  In other words, anything 
  15134.            that would fit the `m' constraint but not the `o' constraint. 
  15135.  
  15136.  `<' 
  15137.            A memory operand with autodecrement addressing (either predecrement 
  15138.            or postdecrement) is allowed. 
  15139.  
  15140.  `>' 
  15141.            A memory operand with autoincrement addressing (either preincrement 
  15142.            or postincrement) is allowed. 
  15143.  
  15144.  `r' 
  15145.            A register operand is allowed provided that it is in a general 
  15146.            register. 
  15147.  
  15148.  `d', `a', `f', ... 
  15149.            Other letters can be defined in machine-dependent fashion to stand 
  15150.            for particular classes of registers.  `d', `a' and `f' are defined 
  15151.            on the 68000/68020 to stand for data, address and floating point 
  15152.            registers. 
  15153.  
  15154.  `i' 
  15155.            An immediate integer operand (one with constant value) is allowed. 
  15156.            This includes symbolic constants whose values will be known only at 
  15157.            assembly time. 
  15158.  
  15159.  `n' 
  15160.            An immediate integer operand with a known numeric value is allowed. 
  15161.            Many systems cannot support assembly-time constants for operands 
  15162.            less than a word wide.  Constraints for these operands should use 
  15163.            `n' rather than `i'. 
  15164.  
  15165.  `I', `J', `K', ... `P' 
  15166.            Other letters in the range `I' through `P' may be defined in a 
  15167.            machine-dependent fashion to permit immediate integer operands with 
  15168.            explicit integer values in specified ranges.  For example, on the 
  15169.            68000, `I' is defined to stand for the range of values 1 to 8. This 
  15170.            is the range permitted as a shift count in the shift instructions. 
  15171.  
  15172.  `E' 
  15173.            An immediate floating operand (expression code const_double) is 
  15174.            allowed, but only if the target floating point format is the same as 
  15175.            that of the host machine (on which the compiler is running). 
  15176.  
  15177.  `F' 
  15178.            An immediate floating operand (expression code const_double) is 
  15179.            allowed. 
  15180.  
  15181.  `G', `H' 
  15182.            `G' and `H' may be defined in a machine-dependent fashion to permit 
  15183.            immediate floating operands in particular ranges of values. 
  15184.  
  15185.  `s' 
  15186.            An immediate integer operand whose value is not an explicit integer 
  15187.            is allowed. 
  15188.  
  15189.            This might appear strange; if an insn allows a constant operand with 
  15190.            a value not known at compile time, it certainly must allow any known 
  15191.            value.  So why use `s' instead of `i'?  Sometimes it allows better 
  15192.            code to be generated. 
  15193.  
  15194.            For example, on the 68000 in a fullword instruction it is possible 
  15195.            to use an immediate operand; but if the immediate value is between 
  15196.            -128 and 127, better code results from loading the value into a 
  15197.            register and using the register.  This is because the load into the 
  15198.            register can be done with a `moveq' instruction.  We arrange for 
  15199.            this to happen by defining the letter `K' to mean ``any integer 
  15200.            outside the range -128 to 127'', and then specifying `Ks' in the 
  15201.            operand constraints. 
  15202.  
  15203.  `g' 
  15204.            Any register, memory or immediate integer operand is allowed, except 
  15205.            for registers that are not general registers. 
  15206.  
  15207.  `X' 
  15208.            Any operand whatsoever is allowed, even if it does not satisfy 
  15209.            general_operand.  This is normally used in the constraint of a 
  15210.            match_scratch when certain alternatives will not actually require a 
  15211.            scratch register. 
  15212.  
  15213.  `0', `1', `2', ... `9' 
  15214.            An operand that matches the specified operand number is allowed.  If 
  15215.            a digit is used together with letters within the same alternative, 
  15216.            the digit should come last. 
  15217.  
  15218.            This is called a matching constraint and what it really means is 
  15219.            that the assembler has only a single operand that fills two roles 
  15220.            considered separate in the RTL insn.  For example, an add insn has 
  15221.            two input operands and one output operand in the RTL, but on most 
  15222.            CISC machines an add instruction really has only two operands, one 
  15223.            of them an input-output operand: 
  15224.  
  15225.                       addl #35,r12
  15226.  
  15227.            Matching constraints are used in these circumstances. More 
  15228.            precisely, the two operands that match must include one input-only 
  15229.            operand and one output-only operand.  Moreover, the digit must be a 
  15230.            smaller number than the number of the operand that uses it in the 
  15231.            constraint. 
  15232.  
  15233.            For operands to match in a particular case usually means that they 
  15234.            are identical-looking RTL expressions.  But in a few special cases 
  15235.            specific kinds of dissimilarity are allowed.  For example, *x as an 
  15236.            input operand will match *x++ as an output operand. For proper 
  15237.            results in such cases, the output template should always use the 
  15238.            output-operand's number when printing the operand. 
  15239.  
  15240.  `p' 
  15241.            An operand that is a valid memory address is allowed.  This is for 
  15242.            ``load address'' and ``push address'' instructions. 
  15243.  
  15244.            `p' in the constraint must be accompanied by address_operand as the 
  15245.            predicate in the match_operand.  This predicate interprets the mode 
  15246.            specified in the match_operand as the mode of the memory reference 
  15247.            for which the address would be valid. 
  15248.  
  15249.  `Q', `R', `S', ... `U' 
  15250.            Letters in the range `Q' through `U' may be defined in a 
  15251.            machine-dependent fashion to stand for arbitrary operand types. The 
  15252.            machine description macro EXTRA_CONSTRAINT is passed the operand as 
  15253.            its first argument and the constraint letter as its second operand. 
  15254.  
  15255.            A typical use for this would be to distinguish certain types of 
  15256.            memory references that affect other insn operands. 
  15257.  
  15258.            Do not define these constraint letters to accept register references 
  15259.            (reg); the reload pass does not expect this and would not handle it 
  15260.            properly. 
  15261.  
  15262.  In order to have valid assembler code, each operand must satisfy its 
  15263.  constraint.  But a failure to do so does not prevent the pattern from applying 
  15264.  to an insn.  Instead, it directs the compiler to modify the code so that the 
  15265.  constraint will be satisfied.  Usually this is done by copying an operand into 
  15266.  a register. 
  15267.  
  15268.  Contrast, therefore, the two instruction patterns that follow: 
  15269.  
  15270.   (define_insn ""
  15271.     [(set (match_operand:SI 0 "general_operand" "=r")
  15272.           (plus:SI (match_dup 0)
  15273.                    (match_operand:SI 1 "general_operand" "r")))]
  15274.     ""
  15275.     "...")
  15276.  
  15277.  which has two operands, one of which must appear in two places, and 
  15278.  
  15279.   (define_insn ""
  15280.     [(set (match_operand:SI 0 "general_operand" "=r")
  15281.           (plus:SI (match_operand:SI 1 "general_operand" "0")
  15282.                    (match_operand:SI 2 "general_operand" "r")))]
  15283.     ""
  15284.     "...")
  15285.  
  15286.  which has three operands, two of which are required by a constraint to be 
  15287.  identical.  If we are considering an insn of the form 
  15288.  
  15289.   (insn n prev next
  15290.     (set (reg:SI 3)
  15291.          (plus:SI (reg:SI 6) (reg:SI 109)))
  15292.     ...)
  15293.  
  15294.  the first pattern would not apply at all, because this insn does not contain 
  15295.  two identical subexpressions in the right place.  The pattern would say, 
  15296.  ``That does not look like an add instruction; try other patterns.'' The second 
  15297.  pattern would say, ``Yes, that's an add instruction, but there is something 
  15298.  wrong with it.''  It would direct the reload pass of the compiler to generate 
  15299.  additional insns to make the constraint true.  The results might look like 
  15300.  this: 
  15301.  
  15302.   (insn n2 prev n
  15303.     (set (reg:SI 3) (reg:SI 6))
  15304.     ...)
  15305.  
  15306.   (insn n n2 next
  15307.     (set (reg:SI 3)
  15308.          (plus:SI (reg:SI 3) (reg:SI 109)))
  15309.     ...)
  15310.  
  15311.  It is up to you to make sure that each operand, in each pattern, has 
  15312.  constraints that can handle any RTL expression that could be present for that 
  15313.  operand.  (When multiple alternatives are in use, each pattern must, for each 
  15314.  possible combination of operand expressions, have at least one alternative 
  15315.  which can handle that combination of operands.)  The constraints don't need to 
  15316.  allow any possible operand---when this is the case, they do not 
  15317.  constrain---but they must at least point the way to reloading any possible 
  15318.  operand so that it will fit. 
  15319.  
  15320.      If the constraint accepts whatever operands the predicate permits, there 
  15321.       is no problem: reloading is never necessary for this operand. 
  15322.  
  15323.       For example, an operand whose constraints permit everything except 
  15324.       registers is safe provided its predicate rejects registers. 
  15325.  
  15326.       An operand whose predicate accepts only constant values is safe provided 
  15327.       its constraints include the letter `i'.  If any possible constant value 
  15328.       is accepted, then nothing less than `i' will do; if the predicate is more 
  15329.       selective, then the constraints may also be more selective. 
  15330.  
  15331.      Any operand expression can be reloaded by copying it into a register. So 
  15332.       if an operand's constraints allow some kind of register, it is certain to 
  15333.       be safe.  It need not permit all classes of registers; the compiler knows 
  15334.       how to copy a register into another register of the proper class in order 
  15335.       to make an instruction valid. 
  15336.  
  15337.      A nonoffsettable memory reference can be reloaded by copying the address 
  15338.       into a register.  So if the constraint uses the letter `o', all memory 
  15339.       references are taken care of. 
  15340.  
  15341.      A constant operand can be reloaded by allocating space in memory to hold 
  15342.       it as preinitialized data.  Then the memory reference can be used in 
  15343.       place of the constant.  So if the constraint uses the letters `o' or `m', 
  15344.       constant operands are not a problem. 
  15345.  
  15346.      If the constraint permits a constant and a pseudo register used in an 
  15347.       insn was not allocated to a hard register and is equivalent to a 
  15348.       constant, the register will be replaced with the constant.  If the 
  15349.       predicate does not permit a constant and the insn is re-recognized for 
  15350.       some reason, the compiler will crash.  Thus the predicate must always 
  15351.       recognize any objects allowed by the constraint. 
  15352.  
  15353.  If the operand's predicate can recognize registers, but the constraint does 
  15354.  not permit them, it can make the compiler crash.  When this operand happens to 
  15355.  be a register, the reload pass will be stymied, because it does not know how 
  15356.  to copy a register temporarily into memory. 
  15357.  
  15358.  
  15359. ΓòÉΓòÉΓòÉ 20.6.2. Multiple Alternative Constraints ΓòÉΓòÉΓòÉ
  15360.  
  15361. Sometimes a single instruction has multiple alternative sets of possible 
  15362. operands.  For example, on the 68000, a logical-or instruction can combine 
  15363. register or an immediate value into memory, or it can combine any kind of 
  15364. operand into a register; but it cannot combine one memory location into 
  15365. another. 
  15366.  
  15367. These constraints are represented as multiple alternatives.  An alternative can 
  15368. be described by a series of letters for each operand.  The overall constraint 
  15369. for an operand is made from the letters for this operand from the first 
  15370. alternative, a comma, the letters for this operand from the second alternative, 
  15371. a comma, and so on until the last alternative. Here is how it is done for 
  15372. fullword logical-or on the 68000: 
  15373.  
  15374. (define_insn "iorsi3"
  15375.   [(set (match_operand:SI 0 "general_operand" "=m,d")
  15376.         (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
  15377.                 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
  15378.   ...)
  15379.  
  15380. The first alternative has `m' (memory) for operand 0, `0' for operand 1 
  15381. (meaning it must match operand 0), and `dKs' for operand 2.  The second 
  15382. alternative has `d' (data register) for operand 0, `0' for operand 1, and 
  15383. `dmKs' for operand 2.  The `=' and `%' in the constraints apply to all the 
  15384. alternatives; their meaning is explained in the next section (see Class 
  15385. Preferences). 
  15386.  
  15387. If all the operands fit any one alternative, the instruction is valid. 
  15388. Otherwise, for each alternative, the compiler counts how many instructions must 
  15389. be added to copy the operands so that that alternative applies. The alternative 
  15390. requiring the least copying is chosen.  If two alternatives need the same 
  15391. amount of copying, the one that comes first is chosen. These choices can be 
  15392. altered with the `?' and `!' characters: 
  15393.  
  15394.  ? 
  15395.            Disparage slightly the alternative that the `?' appears in, as a 
  15396.            choice when no alternative applies exactly.  The compiler regards 
  15397.            this alternative as one unit more costly for each `?' that appears 
  15398.            in it. 
  15399.  
  15400.  ! 
  15401.            Disparage severely the alternative that the `!' appears in. This 
  15402.            alternative can still be used if it fits without reloading, but if 
  15403.            reloading is needed, some other alternative will be used. 
  15404.  
  15405.  When an insn pattern has multiple alternatives in its constraints, often the 
  15406.  appearance of the assembler code is determined mostly by which alternative was 
  15407.  matched.  When this is so, the C code for writing the assembler code can use 
  15408.  the variable which_alternative, which is the ordinal number of the alternative 
  15409.  that was actually satisfied (0 for the first, 1 for the second alternative, 
  15410.  etc.).  See Output Statement. 
  15411.  
  15412.  
  15413. ΓòÉΓòÉΓòÉ 20.6.3. Register Class Preferences ΓòÉΓòÉΓòÉ
  15414.  
  15415. The operand constraints have another function: they enable the compiler to 
  15416. decide which kind of hardware register a pseudo register is best allocated to. 
  15417. The compiler examines the constraints that apply to the insns that use the 
  15418. pseudo register, looking for the machine-dependent letters such as `d' and `a' 
  15419. that specify classes of registers. The pseudo register is put in whichever 
  15420. class gets the most ``votes''. The constraint letters `g' and `r' also vote: 
  15421. they vote in favor of a general register.  The machine description says which 
  15422. registers are considered general. 
  15423.  
  15424. Of course, on some machines all registers are equivalent, and no register 
  15425. classes are defined.  Then none of this complexity is relevant. 
  15426.  
  15427.  
  15428. ΓòÉΓòÉΓòÉ 20.6.4. Constraint Modifier Characters ΓòÉΓòÉΓòÉ
  15429.  
  15430. Here are constraint modifier characters. 
  15431.  
  15432.  `=' 
  15433.            Means that this operand is write-only for this instruction: the 
  15434.            previous value is discarded and replaced by output data. 
  15435.  
  15436.  `+' 
  15437.            Means that this operand is both read and written by the instruction. 
  15438.  
  15439.            When the compiler fixes up the operands to satisfy the constraints, 
  15440.            it needs to know which operands are inputs to the instruction and 
  15441.            which are outputs from it.  `=' identifies an output; `+' identifies 
  15442.            an operand that is both input and output; all other operands are 
  15443.            assumed to be input only. 
  15444.  
  15445.  `&' 
  15446.            Means (in a particular alternative) that this operand is written 
  15447.            before the instruction is finished using the input operands. 
  15448.            Therefore, this operand may not lie in a register that is used as an 
  15449.            input operand or as part of any memory address. 
  15450.  
  15451.            `&' applies only to the alternative in which it is written.  In 
  15452.            constraints with multiple alternatives, sometimes one alternative 
  15453.            requires `&' while others do not.  See, for example, the `movdf' 
  15454.            insn of the 68000. 
  15455.  
  15456.            `&' does not obviate the need to write `='. 
  15457.  
  15458.  `%' 
  15459.            Declares the instruction to be commutative for this operand and the 
  15460.            following operand.  This means that the compiler may interchange the 
  15461.            two operands if that is the cheapest way to make all operands fit 
  15462.            the constraints. This is often used in patterns for addition 
  15463.            instructions that really have only two operands: the result must go 
  15464.            in one of the arguments.  Here for example, is how the 68000 
  15465.            halfword-add instruction is defined: 
  15466.  
  15467.                       (define_insn "addhi3"
  15468.                         [(set (match_operand:HI 0 "general_operand" "=m,r")
  15469.                            (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
  15470.                                     (match_operand:HI 2 "general_operand" "di,g")))]
  15471.                         ...)
  15472.  
  15473.  `#' 
  15474.            Says that all following characters, up to the next comma, are to be 
  15475.            ignored as a constraint.  They are significant only for choosing 
  15476.            register preferences. 
  15477.  
  15478.  `*' 
  15479.            Says that the following character should be ignored when choosing 
  15480.            register preferences.  `*' has no effect on the meaning of the 
  15481.            constraint as a constraint, and no effect on reloading. 
  15482.  
  15483.            Here is an example: the 68000 has an instruction to sign-extend a 
  15484.            halfword in a data register, and can also sign-extend a value by 
  15485.            copying it into an address register.  While either kind of register 
  15486.            is acceptable, the constraints on an address-register destination 
  15487.            are less strict, so it is best if register allocation makes an 
  15488.            address register its goal.  Therefore, `*' is used so that the `d' 
  15489.            constraint letter (for data register) is ignored when computing 
  15490.            register preferences. 
  15491.  
  15492.                       (define_insn "extendhisi2"
  15493.                         [(set (match_operand:SI 0 "general_operand" "=*d,a")
  15494.                               (sign_extend:SI
  15495.                                (match_operand:HI 1 "general_operand" "0,g")))]
  15496.                         ...)
  15497.  
  15498.  
  15499. ΓòÉΓòÉΓòÉ 20.6.5. Constraints for Particular Machines ΓòÉΓòÉΓòÉ
  15500.  
  15501. Whenever possible, you should use the general-purpose constraint letters in asm 
  15502. arguments, since they will convey meaning more readily to people reading your 
  15503. code.  Failing that, use the constraint letters that usually have very similar 
  15504. meanings across architectures.  The most commonly used constraints are `m' and 
  15505. `r' (for memory and general-purpose registers respectively; see Simple 
  15506. Constraints), and `I', usually the letter indicating the most common 
  15507. immediate-constant format. 
  15508.  
  15509. For each machine architecture, the `config/machine.h' file defines additional 
  15510. constraints.  These constraints are used by the compiler itself for instruction 
  15511. generation, as well as for asm statements; therefore, some of the constraints 
  15512. are not particularly interesting for asm.  The constraints are defined through 
  15513. these macros: 
  15514.  
  15515.  REG_CLASS_FROM_LETTER 
  15516.            Register class constraints (usually lower case). 
  15517.  
  15518.  CONST_OK_FOR_LETTER_P 
  15519.            Immediate constant constraints, for non-floating point constants of 
  15520.            word size or smaller precision (usually upper case). 
  15521.  
  15522.  CONST_DOUBLE_OK_FOR_LETTER_P 
  15523.            Immediate constant constraints, for all floating point constants and 
  15524.            for constants of greater than word size precision (usually upper 
  15525.            case). 
  15526.  
  15527.  EXTRA_CONSTRAINT 
  15528.            Special cases of registers or memory.  This macro is not required, 
  15529.            and is only defined for some machines. 
  15530.  
  15531.  Inspecting these macro definitions in the compiler source for your machine is 
  15532.  the best way to be certain you have the right constraints. However, here is a 
  15533.  summary of the machine-dependent constraints available on some particular 
  15534.  machines. 
  15535.  
  15536.  ARM family---`arm.h' 
  15537.  
  15538.            f 
  15539.                           Floating-point register 
  15540.  
  15541.            F 
  15542.                           One of the floating-point constants 0.0, 0.5, 1.0, 
  15543.                           2.0, 3.0, 4.0, 5.0 or 10.0 
  15544.  
  15545.            G 
  15546.                           Floating-point constant that would satisfy the 
  15547.                           constraint `F' if it were negated 
  15548.  
  15549.            I 
  15550.                           Integer that is valid as an immediate operand in a 
  15551.                           data processing instruction.  That is, an integer in 
  15552.                           the range 0 to 255 rotated by a multiple of 2 
  15553.  
  15554.            J 
  15555.                           Integer in the range -4095 to 4095 
  15556.  
  15557.            K 
  15558.                           Integer that satisfies constraint `I' when inverted 
  15559.                           (ones complement) 
  15560.  
  15561.            L 
  15562.                           Integer that satisfies constraint `I' when negated 
  15563.                           (twos complement) 
  15564.  
  15565.            M 
  15566.                           Integer in the range 0 to 32 
  15567.  
  15568.            Q 
  15569.                           A memory reference where the exact address is in a 
  15570.                           single register (``m'' is preferable for asm 
  15571.                           statements) 
  15572.  
  15573.            R 
  15574.                           An item in the constant pool 
  15575.  
  15576.            S 
  15577.                           A symbol in the text segment of the current file 
  15578.  
  15579.  AMD 29000 family---`a29k.h' 
  15580.  
  15581.            l 
  15582.                           Local register 0 
  15583.  
  15584.            b 
  15585.                           Byte Pointer (`BP') register 
  15586.  
  15587.            q 
  15588.                           `Q' register 
  15589.  
  15590.            h 
  15591.                           Special purpose register 
  15592.  
  15593.            A 
  15594.                           First accumulator register 
  15595.  
  15596.            a 
  15597.                           Other accumulator register 
  15598.  
  15599.            f 
  15600.                           Floating point register 
  15601.  
  15602.            I 
  15603.                           Constant greater than 0, less than 0x100 
  15604.  
  15605.            J 
  15606.                           Constant greater than 0, less than 0x10000 
  15607.  
  15608.            K 
  15609.                           Constant whose high 24 bits are on (1) 
  15610.  
  15611.            L 
  15612.                           16 bit constant whose high 8 bits are on (1) 
  15613.  
  15614.            M 
  15615.                           32 bit constant whose high 16 bits are on (1) 
  15616.  
  15617.            N 
  15618.                           32 bit negative constant that fits in 8 bits 
  15619.  
  15620.            O 
  15621.                           The constant 0x80000000 or, on the 29050, any 32 bit 
  15622.                           constant whose low 16 bits are 0. 
  15623.  
  15624.            P 
  15625.                           16 bit negative constant that fits in 8 bits 
  15626.  
  15627.            G 
  15628.            H 
  15629.                           A floating point constant (in asm statements, use the 
  15630.                           machine independent `E' or `F' instead) 
  15631.  
  15632.  IBM RS6000---`rs6000.h' 
  15633.  
  15634.            b 
  15635.                           Address base register 
  15636.  
  15637.            f 
  15638.                           Floating point register 
  15639.  
  15640.            h 
  15641.                           `MQ', `CTR', or `LINK' register 
  15642.  
  15643.            q 
  15644.                           `MQ' register 
  15645.  
  15646.            c 
  15647.                           `CTR' register 
  15648.  
  15649.            l 
  15650.                           `LINK' register 
  15651.  
  15652.            x 
  15653.                           `CR' register (condition register) number 0 
  15654.  
  15655.            y 
  15656.                           `CR' register (condition register) 
  15657.  
  15658.            I 
  15659.                           Signed 16 bit constant 
  15660.  
  15661.            J 
  15662.                           Constant whose low 16 bits are 0 
  15663.  
  15664.            K 
  15665.                           Constant whose high 16 bits are 0 
  15666.  
  15667.            L 
  15668.                           Constant suitable as a mask operand 
  15669.  
  15670.            M 
  15671.                           Constant larger than 31 
  15672.  
  15673.            N 
  15674.                           Exact power of 2 
  15675.  
  15676.            O 
  15677.                           Zero 
  15678.  
  15679.            P 
  15680.                           Constant whose negation is a signed 16 bit constant 
  15681.  
  15682.            G 
  15683.                           Floating point constant that can be loaded into a 
  15684.                           register with one instruction per word 
  15685.  
  15686.            Q 
  15687.                           Memory operand that is an offset from a register (`m' 
  15688.                           is preferable for asm statements) 
  15689.  
  15690.  Intel 386---`i386.h' 
  15691.  
  15692.            q 
  15693.                           `a', b, c, or d register 
  15694.  
  15695.            A 
  15696.                           `a', or d register (for 64-bit ints) 
  15697.  
  15698.            f 
  15699.                           Floating point register 
  15700.  
  15701.            t 
  15702.                           First (top of stack) floating point register 
  15703.  
  15704.            u 
  15705.                           Second floating point register 
  15706.  
  15707.            a 
  15708.                           `a' register 
  15709.  
  15710.            b 
  15711.                           `b' register 
  15712.  
  15713.            c 
  15714.                           `c' register 
  15715.  
  15716.            d 
  15717.                           `d' register 
  15718.  
  15719.            D 
  15720.                           `di' register 
  15721.  
  15722.            S 
  15723.                           `si' register 
  15724.  
  15725.            I 
  15726.                           Constant in range 0 to 31 (for 32 bit shifts) 
  15727.  
  15728.            J 
  15729.                           Constant in range 0 to 63 (for 64 bit shifts) 
  15730.  
  15731.            K 
  15732.                           `0xff' 
  15733.  
  15734.            L 
  15735.                           `0xffff' 
  15736.  
  15737.            M 
  15738.                           0, 1, 2, or 3 (shifts for lea instruction) 
  15739.  
  15740.            N 
  15741.                           Constant in range 0 to 255 (for out instruction) 
  15742.  
  15743.            G 
  15744.                           Standard 80387 floating point constant 
  15745.  
  15746.  Intel 960---`i960.h' 
  15747.  
  15748.            f 
  15749.                           Floating point register (fp0 to fp3) 
  15750.  
  15751.            l 
  15752.                           Local register (r0 to r15) 
  15753.  
  15754.            b 
  15755.                           Global register (g0 to g15) 
  15756.  
  15757.            d 
  15758.                           Any local or global register 
  15759.  
  15760.            I 
  15761.                           Integers from 0 to 31 
  15762.  
  15763.            J 
  15764.                           0 
  15765.  
  15766.            K 
  15767.                           Integers from -31 to 0 
  15768.  
  15769.            G 
  15770.                           Floating point 0 
  15771.  
  15772.            H 
  15773.                           Floating point 1 
  15774.  
  15775.  MIPS---`mips.h' 
  15776.  
  15777.            d 
  15778.                           General-purpose integer register 
  15779.  
  15780.            f 
  15781.                           Floating-point register (if available) 
  15782.  
  15783.            h 
  15784.                           `Hi' register 
  15785.  
  15786.            l 
  15787.                           `Lo' register 
  15788.  
  15789.            x 
  15790.                           `Hi' or `Lo' register 
  15791.  
  15792.            y 
  15793.                           General-purpose integer register 
  15794.  
  15795.            z 
  15796.                           Floating-point status register 
  15797.  
  15798.            I 
  15799.                           Signed 16 bit constant (for arithmetic instructions) 
  15800.  
  15801.            J 
  15802.                           Zero 
  15803.  
  15804.            K 
  15805.                           Zero-extended 16-bit constant (for logic 
  15806.                           instructions) 
  15807.  
  15808.            L 
  15809.                           Constant with low 16 bits zero (can be loaded with 
  15810.                           lui) 
  15811.  
  15812.            M 
  15813.                           32 bit constant which requires two instructions to 
  15814.                           load (a constant which is not `I', `K', or `L') 
  15815.  
  15816.            N 
  15817.                           Negative 16 bit constant 
  15818.  
  15819.            O 
  15820.                           Exact power of two 
  15821.  
  15822.            P 
  15823.                           Positive 16 bit constant 
  15824.  
  15825.            G 
  15826.                           Floating point zero 
  15827.  
  15828.            Q 
  15829.                           Memory reference that can be loaded with more than 
  15830.                           one instruction (`m' is preferable for asm 
  15831.                           statements) 
  15832.  
  15833.            R 
  15834.                           Memory reference that can be loaded with one 
  15835.                           instruction (`m' is preferable for asm statements) 
  15836.  
  15837.            S 
  15838.                           Memory reference in external OSF/rose PIC format (`m' 
  15839.                           is preferable for asm statements) 
  15840.  
  15841.  Motorola 680x0---`m68k.h' 
  15842.  
  15843.            a 
  15844.                           Address register 
  15845.  
  15846.            d 
  15847.                           Data register 
  15848.  
  15849.            f 
  15850.                           68881 floating-point register, if available 
  15851.  
  15852.            x 
  15853.                           Sun FPA (floating-point) register, if available 
  15854.  
  15855.            y 
  15856.                           First 16 Sun FPA registers, if available 
  15857.  
  15858.            I 
  15859.                           Integer in the range 1 to 8 
  15860.  
  15861.            J 
  15862.                           16 bit signed number 
  15863.  
  15864.            K 
  15865.                           Signed number whose magnitude is greater than 0x80 
  15866.  
  15867.            L 
  15868.                           Integer in the range -8 to -1 
  15869.  
  15870.            G 
  15871.                           Floating point constant that is not a 68881 constant 
  15872.  
  15873.            H 
  15874.                           Floating point constant that can be used by Sun FPA 
  15875.  
  15876.  SPARC---`sparc.h' 
  15877.  
  15878.            f 
  15879.                           Floating-point register 
  15880.  
  15881.            I 
  15882.                           Signed 13 bit constant 
  15883.  
  15884.            J 
  15885.                           Zero 
  15886.  
  15887.            K 
  15888.                           32 bit constant with the low 12 bits clear (a 
  15889.                           constant that can be loaded with the sethi 
  15890.                           instruction) 
  15891.  
  15892.            G 
  15893.                           Floating-point zero 
  15894.  
  15895.            H 
  15896.                           Signed 13 bit constant, sign-extended to 32 or 64 
  15897.                           bits 
  15898.  
  15899.            Q 
  15900.                           Memory reference that can be loaded with one 
  15901.                           instruction  (`m' is more appropriate for asm 
  15902.                           statements) 
  15903.  
  15904.            S 
  15905.                           Constant, or memory address 
  15906.  
  15907.            T 
  15908.                           Memory address aligned to an 8-byte boundary 
  15909.  
  15910.            U 
  15911.                           Even register 
  15912.  
  15913.  
  15914. ΓòÉΓòÉΓòÉ 20.6.6. Not Using Constraints ΓòÉΓòÉΓòÉ
  15915.  
  15916. Some machines are so clean that operand constraints are not required.  For 
  15917. example, on the Vax, an operand valid in one context is valid in any other 
  15918. context.  On such a machine, every operand constraint would be `g', excepting 
  15919. only operands of ``load address'' instructions which are written as if they 
  15920. referred to a memory location's contents but actual refer to its address.  They 
  15921. would have constraint `p'. 
  15922.  
  15923. For such machines, instead of writing `g' and `p' for all the constraints, you 
  15924. can choose to write a description with empty constraints. Then you write `""' 
  15925. for the constraint in every match_operand. Address operands are identified by 
  15926. writing an address expression around the match_operand, not by their 
  15927. constraints. 
  15928.  
  15929. When the machine description has just empty constraints, certain parts of 
  15930. compilation are skipped, making the compiler faster.  However, few machines 
  15931. actually do not need constraints; all machine descriptions now in existence use 
  15932. constraints. 
  15933.  
  15934.  
  15935. ΓòÉΓòÉΓòÉ 20.7. Standard Pattern Names For Generation ΓòÉΓòÉΓòÉ
  15936.  
  15937. Here is a table of the instruction names that are meaningful in the RTL 
  15938. generation pass of the compiler.  Giving one of these names to an instruction 
  15939. pattern tells the RTL generation pass that it can use the pattern in to 
  15940. accomplish a certain task. 
  15941.  
  15942.  `movm' 
  15943.            Here m stands for a two-letter machine mode name, in lower case. 
  15944.            This instruction pattern moves data with that machine mode from 
  15945.            operand 1 to operand 0.  For example, `movsi' moves full-word data. 
  15946.  
  15947.            If operand 0 is a subreg with mode m of a register whose own mode is 
  15948.            wider than m, the effect of this instruction is to store the 
  15949.            specified value in the part of the register that corresponds to mode 
  15950.            m.  The effect on the rest of the register is undefined. 
  15951.  
  15952.            This class of patterns is special in several ways.  First of all, 
  15953.            each of these names must be defined, because there is no other way 
  15954.            to copy a datum from one place to another. 
  15955.  
  15956.            Second, these patterns are not used solely in the RTL generation 
  15957.            pass. Even the reload pass can generate move insns to copy values 
  15958.            from stack slots into temporary registers.  When it does so, one of 
  15959.            the operands is a hard register and the other is an operand that can 
  15960.            need to be reloaded into a register. 
  15961.  
  15962.            Therefore, when given such a pair of operands, the pattern must 
  15963.            generate RTL which needs no reloading and needs no temporary 
  15964.            registers---no registers other than the operands.  For example, if 
  15965.            you support the pattern with a define_expand, then in such a case 
  15966.            the define_expand mustn't call force_reg or any other such function 
  15967.            which might generate new pseudo registers. 
  15968.  
  15969.            This requirement exists even for subword modes on a RISC machine 
  15970.            where fetching those modes from memory normally requires several 
  15971.            insns and some temporary registers.  Look in `spur.md' to see how 
  15972.            the requirement can be satisfied. 
  15973.  
  15974.            During reload a memory reference with an invalid address may be 
  15975.            passed as an operand.  Such an address will be replaced with a valid 
  15976.            address later in the reload pass.  In this case, nothing may be done 
  15977.            with the address except to use it as it stands.  If it is copied, it 
  15978.            will not be replaced with a valid address.  No attempt should be 
  15979.            made to make such an address into a valid address and no routine 
  15980.            (such as change_address) that will do so may be called.  Note that 
  15981.            general_operand will fail when applied to such an address. 
  15982.  
  15983.            The global variable reload_in_progress (which must be explicitly 
  15984.            declared if required) can be used to determine whether such special 
  15985.            handling is required. 
  15986.  
  15987.            The variety of operands that have reloads depends on the rest of the 
  15988.            machine description, but typically on a RISC machine these can only 
  15989.            be pseudo registers that did not get hard registers, while on other 
  15990.            machines explicit memory references will get optional reloads. 
  15991.  
  15992.            If a scratch register is required to move an object to or from 
  15993.            memory, it can be allocated using gen_reg_rtx prior to reload.  But 
  15994.            this is impossible during and after reload.  If there are cases 
  15995.            needing scratch registers after reload, you must define 
  15996.            SECONDARY_INPUT_RELOAD_CLASS and perhaps also 
  15997.            SECONDARY_OUTPUT_RELOAD_CLASS to detect them, and provide patterns 
  15998.            `reload_inm' or `reload_outm' to handle them.  See Register Classes. 
  15999.  
  16000.            The constraints on a `movem' must permit moving any hard register to 
  16001.            any other hard register provided that HARD_REGNO_MODE_OK permits 
  16002.            mode m in both registers and REGISTER_MOVE_COST applied to their 
  16003.            classes returns a value of 2. 
  16004.  
  16005.            It is obligatory to support floating point `movem' instructions into 
  16006.            and out of any registers that can hold fixed point values, because 
  16007.            unions and structures (which have modes SImode or DImode) can be in 
  16008.            those registers and they may have floating point members. 
  16009.  
  16010.            There may also be a need to support fixed point `movem' instructions 
  16011.            in and out of floating point registers.  Unfortunately, I have 
  16012.            forgotten why this was so, and I don't know whether it is still 
  16013.            true.  If HARD_REGNO_MODE_OK rejects fixed point values in floating 
  16014.            point registers, then the constraints of the fixed point `movem' 
  16015.            instructions must be designed to avoid ever trying to reload into a 
  16016.            floating point register. 
  16017.  
  16018.  `reload_inm' 
  16019.  `reload_outm' 
  16020.            Like `movm', but used when a scratch register is required to move 
  16021.            between operand 0 and operand 1.  Operand 2 describes the scratch 
  16022.            register.  See the discussion of the SECONDARY_RELOAD_CLASS macro in 
  16023.            see Register Classes. 
  16024.  
  16025.  `movstrictm' 
  16026.            Like `movm' except that if operand 0 is a subreg with mode m of a 
  16027.            register whose natural mode is wider, the `movstrictm' instruction 
  16028.            is guaranteed not to alter any of the register except the part which 
  16029.            belongs to mode m. 
  16030.  
  16031.  `load_multiple' 
  16032.            Load several consecutive memory locations into consecutive 
  16033.            registers. Operand 0 is the first of the consecutive registers, 
  16034.            operand 1 is the first memory location, and operand 2 is a constant: 
  16035.            the number of consecutive registers. 
  16036.  
  16037.            Define this only if the target machine really has such an 
  16038.            instruction; do not define this if the most efficient way of loading 
  16039.            consecutive registers from memory is to do them one at a time. 
  16040.  
  16041.            On some machines, there are restrictions as to which consecutive 
  16042.            registers can be stored into memory, such as particular starting or 
  16043.            ending register numbers or only a range of valid counts.  For those 
  16044.            machines, use a define_expand (see Expander Definitions) and make 
  16045.            the pattern fail if the restrictions are not met. 
  16046.  
  16047.            Write the generated insn as a parallel with elements being a set of 
  16048.            one register from the appropriate memory location (you may also need 
  16049.            use or clobber elements).  Use a match_parallel (see RTL Template) 
  16050.            to recognize the insn.  See `a29k.md' and `rs6000.md' for examples 
  16051.            of the use of this insn pattern. 
  16052.  
  16053.  `store_multiple' 
  16054.            Similar to `load_multiple', but store several consecutive registers 
  16055.            into consecutive memory locations.  Operand 0 is the first of the 
  16056.            consecutive memory locations, operand 1 is the first register, and 
  16057.            operand 2 is a constant: the number of consecutive registers. 
  16058.  
  16059.  `addm3' 
  16060.            Add operand 2 and operand 1, storing the result in operand 0.  All 
  16061.            operands must have mode m.  This can be used even on two-address 
  16062.            machines, by means of constraints requiring operands 1 and 0 to be 
  16063.            the same location. 
  16064.  
  16065.  `subm3', `mulm3' 
  16066.  `divm3', `udivm3', `modm3', `umodm3' 
  16067.  `sminm3', `smaxm3', `uminm3', `umaxm3' 
  16068.  `andm3', `iorm3', `xorm3' 
  16069.            Similar, for other arithmetic operations. 
  16070.  
  16071.  `mulhisi3' 
  16072.            Multiply operands 1 and 2, which have mode HImode, and store a 
  16073.            SImode product in operand 0. 
  16074.  
  16075.  `mulqihi3', ` mulsidi3' 
  16076.            Similar widening-multiplication instructions of other widths. 
  16077.  
  16078.  `umulqihi3', `umulhisi3', `umulsidi3' 
  16079.            Similar widening-multiplication instructions that do unsigned 
  16080.            multiplication. 
  16081.  
  16082.  `mulm3_highpart' 
  16083.            Perform a signed multiplication of operands 1 and 2, which have mode 
  16084.            m, and store the most significant half of the product in operand 0. 
  16085.            The least significant half of the product is discarded. 
  16086.  
  16087.  `umulm3_highpart' 
  16088.            Similar, but the multiplication is unsigned. 
  16089.  
  16090.  `divmodm4' 
  16091.            Signed division that produces both a quotient and a remainder. 
  16092.            Operand 1 is divided by operand 2 to produce a quotient stored in 
  16093.            operand 0 and a remainder stored in operand 3. 
  16094.  
  16095.            For machines with an instruction that produces both a quotient and a 
  16096.            remainder, provide a pattern for `divmodm4' but do not provide 
  16097.            patterns for `divm3' and `modm3'.  This allows optimization in the 
  16098.            relatively common case when both the quotient and remainder are 
  16099.            computed. 
  16100.  
  16101.            If an instruction that just produces a quotient or just a remainder 
  16102.            exists and is more efficient than the instruction that produces 
  16103.            both, write the output routine of `divmodm4' to call find_reg_note 
  16104.            and look for a REG_UNUSED note on the quotient or remainder and 
  16105.            generate the appropriate instruction. 
  16106.  
  16107.  `udivmodm4' 
  16108.            Similar, but does unsigned division. 
  16109.  
  16110.  `ashlm3' 
  16111.            Arithmetic-shift operand 1 left by a number of bits specified by 
  16112.            operand 2, and store the result in operand 0.  Here m is the mode of 
  16113.            operand 0 and operand 1; operand 2's mode is specified by the 
  16114.            instruction pattern, and the compiler will convert the operand to 
  16115.            that mode before generating the instruction. 
  16116.  
  16117.  `ashrm3', `lshrm3', `rotlm3', `rotrm3' 
  16118.            Other shift and rotate instructions, analogous to the ashlm3 
  16119.            instructions. 
  16120.  
  16121.  `negm2' 
  16122.            Negate operand 1 and store the result in operand 0. 
  16123.  
  16124.  `absm2' 
  16125.            Store the absolute value of operand 1 into operand 0. 
  16126.  
  16127.  `sqrtm2' 
  16128.            Store the square root of operand 1 into operand 0. 
  16129.  
  16130.            The sqrt built-in function of C always uses the mode which 
  16131.            corresponds to the C data type double. 
  16132.  
  16133.  `ffsm2' 
  16134.            Store into operand 0 one plus the index of the least significant 
  16135.            1-bit of operand 1.  If operand 1 is zero, store zero.  m is the 
  16136.            mode of operand 0; operand 1's mode is specified by the instruction 
  16137.            pattern, and the compiler will convert the operand to that mode 
  16138.            before generating the instruction. 
  16139.  
  16140.            The ffs built-in function of C always uses the mode which 
  16141.            corresponds to the C data type int. 
  16142.  
  16143.  `one_cmplm2' 
  16144.            Store the bitwise-complement of operand 1 into operand 0. 
  16145.  
  16146.  `cmpm' 
  16147.            Compare operand 0 and operand 1, and set the condition codes. The 
  16148.            RTL pattern should look like this: 
  16149.  
  16150.                       (set (cc0) (compare (match_operand:m 0 ...)
  16151.                                           (match_operand:m 1 ...)))
  16152.  
  16153.  `tstm' 
  16154.            Compare operand 0 against zero, and set the condition codes. The RTL 
  16155.            pattern should look like this: 
  16156.  
  16157.                       (set (cc0) (match_operand:m 0 ...))
  16158.  
  16159.            `tstm' patterns should not be defined for machines that do not use 
  16160.            (cc0).  Doing so would confuse the optimizer since it would no 
  16161.            longer be clear which set operations were comparisons. The `cmpm' 
  16162.            patterns should be used instead. 
  16163.  
  16164.  `movstrm' 
  16165.            Block move instruction.  The addresses of the destination and source 
  16166.            strings are the first two operands, and both are in mode Pmode. The 
  16167.            number of bytes to move is the third operand, in mode m. 
  16168.  
  16169.            The fourth operand is the known shared alignment of the source and 
  16170.            destination, in the form of a const_int rtx.  Thus, if the compiler 
  16171.            knows that both source and destination are word-aligned, it may 
  16172.            provide the value 4 for this operand. 
  16173.  
  16174.            These patterns need not give special consideration to the 
  16175.            possibility that the source and destination strings might overlap. 
  16176.  
  16177.  `cmpstrm' 
  16178.            Block compare instruction, with five operands.  Operand 0 is the 
  16179.            output; it has mode m.  The remaining four operands are like the 
  16180.            operands of `movstrm'.  The two memory blocks specified are compared 
  16181.            byte by byte in lexicographic order.  The effect of the instruction 
  16182.            is to store a value in operand 0 whose sign indicates the result of 
  16183.            the comparison. 
  16184.  
  16185.            Compute the length of a string, with three operands. Operand 0 is 
  16186.            the result (of mode m), operand 1 is a mem referring to the first 
  16187.            character of the string, operand 2 is the character to search for 
  16188.            (normally zero), and operand 3 is a constant describing the known 
  16189.            alignment of the beginning of the string. 
  16190.  
  16191.  `floatmn2' 
  16192.            Convert signed integer operand 1 (valid for fixed point mode m) to 
  16193.            floating point mode n and store in operand 0 (which has mode n). 
  16194.  
  16195.  `floatunsmn2' 
  16196.            Convert unsigned integer operand 1 (valid for fixed point mode m) to 
  16197.            floating point mode n and store in operand 0 (which has mode n). 
  16198.  
  16199.  `fixmn2' 
  16200.            Convert operand 1 (valid for floating point mode m) to fixed point 
  16201.            mode n as a signed number and store in operand 0 (which has mode n). 
  16202.            This instruction's result is defined only when the value of operand 
  16203.            1 is an integer. 
  16204.  
  16205.  `fixunsmn2' 
  16206.            Convert operand 1 (valid for floating point mode m) to fixed point 
  16207.            mode n as an unsigned number and store in operand 0 (which has mode 
  16208.            n).  This instruction's result is defined only when the value of 
  16209.            operand 1 is an integer. 
  16210.  
  16211.  `ftruncm2' 
  16212.            Convert operand 1 (valid for floating point mode m) to an integer 
  16213.            value, still represented in floating point mode m, and store it in 
  16214.            operand 0 (valid for floating point mode m). 
  16215.  
  16216.  `fix_truncmn2' 
  16217.            Like `fixmn2' but works for any floating point value of mode m by 
  16218.            converting the value to an integer. 
  16219.  
  16220.  `fixuns_truncmn2' 
  16221.            Like `fixunsmn2' but works for any floating point value of mode m by 
  16222.            converting the value to an integer. 
  16223.  
  16224.  `truncmn' 
  16225.            Truncate operand 1 (valid for mode m) to mode n and store in operand 
  16226.            0 (which has mode n).  Both modes must be fixed point or both 
  16227.            floating point. 
  16228.  
  16229.  `extendmn' 
  16230.            Sign-extend operand 1 (valid for mode m) to mode n and store in 
  16231.            operand 0 (which has mode n).  Both modes must be fixed point or 
  16232.            both floating point. 
  16233.  
  16234.  `zero_extendmn' 
  16235.            Zero-extend operand 1 (valid for mode m) to mode n and store in 
  16236.            operand 0 (which has mode n).  Both modes must be fixed point. 
  16237.  
  16238.  `extv' 
  16239.            Extract a bit field from operand 1 (a register or memory operand), 
  16240.            where operand 2 specifies the width in bits and operand 3 the 
  16241.            starting bit, and store it in operand 0.  Operand 0 must have mode 
  16242.            word_mode. Operand 1 may have mode byte_mode or word_mode; often 
  16243.            word_mode is allowed only for registers.  Operands 2 and 3 must be 
  16244.            valid for word_mode. 
  16245.  
  16246.            The RTL generation pass generates this instruction only with 
  16247.            constants for operands 2 and 3. 
  16248.  
  16249.            The bit-field value is sign-extended to a full word integer before 
  16250.            it is stored in operand 0. 
  16251.  
  16252.  `extzv' 
  16253.            Like `extv' except that the bit-field value is zero-extended. 
  16254.  
  16255.  `insv' 
  16256.            Store operand 3 (which must be valid for word_mode) into a bit field 
  16257.            in operand 0, where operand 1 specifies the width in bits and 
  16258.            operand 2 the starting bit.  Operand 0 may have mode byte_mode or 
  16259.            word_mode; often word_mode is allowed only for registers. Operands 1 
  16260.            and 2 must be valid for word_mode. 
  16261.  
  16262.            The RTL generation pass generates this instruction only with 
  16263.            constants for operands 1 and 2. 
  16264.  
  16265.  `movmodecc' 
  16266.            Conditionally move operand 2 or operand 3 into operand 0 according 
  16267.            to the comparison in operand 1.  If the comparison is true, operand 
  16268.            2 is moved into operand 0, otherwise operand 3 is moved. 
  16269.  
  16270.            The mode of the operands being compared need not be the same as the 
  16271.            operands being moved.  Some machines, sparc64 for example, have 
  16272.            instructions that conditionally move an integer value based on the 
  16273.            floating point condition codes and vice versa. 
  16274.  
  16275.            If the machine does not have conditional move instructions, do not 
  16276.            define these patterns. 
  16277.  
  16278.  `scond' 
  16279.            Store zero or nonzero in the operand according to the condition 
  16280.            codes. Value stored is nonzero iff the condition cond is true. cond 
  16281.            is the name of a comparison operation expression code, such as eq, 
  16282.            lt or leu. 
  16283.  
  16284.            You specify the mode that the operand must have when you write the 
  16285.            match_operand expression.  The compiler automatically sees which 
  16286.            mode you have used and supplies an operand of that mode. 
  16287.  
  16288.            The value stored for a true condition must have 1 as its low bit, or 
  16289.            else must be negative.  Otherwise the instruction is not suitable 
  16290.            and you should omit it from the machine description.  You describe 
  16291.            to the compiler exactly which value is stored by defining the macro 
  16292.            STORE_FLAG_VALUE (see Misc).  If a description cannot be found that 
  16293.            can be used for all the `scond' patterns, you should omit those 
  16294.            operations from the machine description. 
  16295.  
  16296.            These operations may fail, but should do so only in relatively 
  16297.            uncommon cases; if they would fail for common cases involving 
  16298.            integer comparisons, it is best to omit these patterns. 
  16299.  
  16300.            If these operations are omitted, the compiler will usually generate 
  16301.            code that copies the constant one to the target and branches around 
  16302.            an assignment of zero to the target.  If this code is more efficient 
  16303.            than the potential instructions used for the `scond' pattern 
  16304.            followed by those required to convert the result into a 1 or a zero 
  16305.            in SImode, you should omit the `scond' operations from the machine 
  16306.            description. 
  16307.  
  16308.  `bcond' 
  16309.            Conditional branch instruction.  Operand 0 is a label_ref that 
  16310.            refers to the label to jump to.  Jump if the condition codes meet 
  16311.            condition cond. 
  16312.  
  16313.            Some machines do not follow the model assumed here where a 
  16314.            comparison instruction is followed by a conditional branch 
  16315.            instruction.  In that case, the `cmpm' (and `tstm') patterns should 
  16316.            simply store the operands away and generate all the required insns 
  16317.            in a define_expand (see Expander Definitions) for the conditional 
  16318.            branch operations.  All calls to expand `bcond' patterns are 
  16319.            immediately preceded by calls to expand either a `cmpm' pattern or a 
  16320.            `tstm' pattern. 
  16321.  
  16322.            Machines that use a pseudo register for the condition code value, or 
  16323.            where the mode used for the comparison depends on the condition 
  16324.            being tested, should also use the above mechanism.  See Jump 
  16325.            Patterns 
  16326.  
  16327.            The above discussion also applies to the `movmodecc' and `scond' 
  16328.            patterns. 
  16329.  
  16330.  `call' 
  16331.            Subroutine call instruction returning no value.  Operand 0 is the 
  16332.            function to call; operand 1 is the number of bytes of arguments 
  16333.            pushed (in mode SImode, except it is normally a const_int); operand 
  16334.            2 is the number of registers used as operands. 
  16335.  
  16336.            On most machines, operand 2 is not actually stored into the RTL 
  16337.            pattern.  It is supplied for the sake of some RISC machines which 
  16338.            need to put this information into the assembler code; they can put 
  16339.            it in the RTL instead of operand 1. 
  16340.  
  16341.            Operand 0 should be a mem RTX whose address is the address of the 
  16342.            function.  Note, however, that this address can be a symbol_ref 
  16343.            expression even if it would not be a legitimate memory address on 
  16344.            the target machine.  If it is also not a valid argument for a call 
  16345.            instruction, the pattern for this operation should be a 
  16346.            define_expand (see Expander Definitions) that places the address 
  16347.            into a register and uses that register in the call instruction. 
  16348.  
  16349.  `call_value' 
  16350.            Subroutine call instruction returning a value.  Operand 0 is the 
  16351.            hard register in which the value is returned.  There are three more 
  16352.            operands, the same as the three operands of the `call' instruction 
  16353.            (but with numbers increased by one). 
  16354.  
  16355.            Subroutines that return BLKmode objects use the `call' insn. 
  16356.  
  16357.  `call_pop', `call_value_pop' 
  16358.            Similar to `call' and `call_value', except used if defined and if 
  16359.            RETURN_POPS_ARGS is non-zero.  They should emit a parallel that 
  16360.            contains both the function call and a set to indicate the adjustment 
  16361.            made to the frame pointer. 
  16362.  
  16363.            For machines where RETURN_POPS_ARGS can be non-zero, the use of 
  16364.            these patterns increases the number of functions for which the frame 
  16365.            pointer can be eliminated, if desired. 
  16366.  
  16367.  `untyped_call' 
  16368.            Subroutine call instruction returning a value of any type.  Operand 
  16369.            0 is the function to call; operand 1 is a memory location where the 
  16370.            result of calling the function is to be stored; operand 2 is a 
  16371.            parallel expression where each element is a set expression that 
  16372.            indicates the saving of a function return value into the result 
  16373.            block. 
  16374.  
  16375.            This instruction pattern should be defined to support 
  16376.            __builtin_apply on machines where special instructions are needed to 
  16377.            call a subroutine with arbitrary arguments or to save the value 
  16378.            returned.  This instruction pattern is required on machines that 
  16379.            have multiple registers that can hold a return value (i.e. 
  16380.            FUNCTION_VALUE_REGNO_P is true for more than one register). 
  16381.  
  16382.  `return' 
  16383.            Subroutine return instruction.  This instruction pattern name should 
  16384.            be defined only if a single instruction can do all the work of 
  16385.            returning from a function. 
  16386.  
  16387.            Like the `movm' patterns, this pattern is also used after the RTL 
  16388.            generation phase.  In this case it is to support machines where 
  16389.            multiple instructions are usually needed to return from a function, 
  16390.            but some class of functions only requires one instruction to 
  16391.            implement a return.  Normally, the applicable functions are those 
  16392.            which do not need to save any registers or allocate stack space. 
  16393.  
  16394.            For such machines, the condition specified in this pattern should 
  16395.            only be true when reload_completed is non-zero and the function's 
  16396.            epilogue would only be a single instruction.  For machines with 
  16397.            register windows, the routine leaf_function_p may be used to 
  16398.            determine if a register window push is required. 
  16399.  
  16400.            Machines that have conditional return instructions should define 
  16401.            patterns such as 
  16402.  
  16403.                       (define_insn ""
  16404.                         [(set (pc)
  16405.                               (if_then_else (match_operator
  16406.                                                0 "comparison_operator"
  16407.                                                [(cc0) (const_int 0)])
  16408.                                             (return)
  16409.                                             (pc)))]
  16410.                         "condition"
  16411.                         "...")
  16412.  
  16413.            where condition would normally be the same condition specified on 
  16414.            the named `return' pattern. 
  16415.  
  16416.  `untyped_return' 
  16417.            Untyped subroutine return instruction.  This instruction pattern 
  16418.            should be defined to support __builtin_return on machines where 
  16419.            special instructions are needed to return a value of any type. 
  16420.  
  16421.            Operand 0 is a memory location where the result of calling a 
  16422.            function with __builtin_apply is stored; operand 1 is a parallel 
  16423.            expression where each element is a set expression that indicates the 
  16424.            restoring of a function return value from the result block. 
  16425.  
  16426.  `nop' 
  16427.            No-op instruction.  This instruction pattern name should always be 
  16428.            defined to output a no-op in assembler code.  (const_int 0) will do 
  16429.            as an RTL pattern. 
  16430.  
  16431.  `indirect_jump' 
  16432.            An instruction to jump to an address which is operand zero. This 
  16433.            pattern name is mandatory on all machines. 
  16434.  
  16435.  `casesi' 
  16436.            Instruction to jump through a dispatch table, including bounds 
  16437.            checking. This instruction takes five operands: 
  16438.  
  16439.              1. The index to dispatch on, which has mode SImode. 
  16440.  
  16441.              2. The lower bound for indices in the table, an integer constant. 
  16442.  
  16443.              3. The total range of indices in the table---the largest index 
  16444.                 minus the smallest one (both inclusive). 
  16445.  
  16446.              4. A label that precedes the table itself. 
  16447.  
  16448.              5. A label to jump to if the index has a value outside the bounds. 
  16449.                 (If the machine-description macro CASE_DROPS_THROUGH is 
  16450.                 defined, then an out-of-bounds index drops through to the code 
  16451.                 following the jump table instead of jumping to this label.  In 
  16452.                 that case, this label is not actually used by the `casesi' 
  16453.                 instruction, but it is always provided as an operand.) 
  16454.  
  16455.            The table is a addr_vec or addr_diff_vec inside of a jump_insn.  The 
  16456.            number of elements in the table is one plus the difference between 
  16457.            the upper bound and the lower bound. 
  16458.  
  16459.  `tablejump' 
  16460.            Instruction to jump to a variable address.  This is a low-level 
  16461.            capability which can be used to implement a dispatch table when 
  16462.            there is no `casesi' pattern. 
  16463.  
  16464.            This pattern requires two operands: the address or offset, and a 
  16465.            label which should immediately precede the jump table.  If the macro 
  16466.            CASE_VECTOR_PC_RELATIVE is defined then the first operand is an 
  16467.            offset which counts from the address of the table; otherwise, it is 
  16468.            an absolute address to jump to.  In either case, the first operand 
  16469.            has mode Pmode. 
  16470.  
  16471.            The `tablejump' insn is always the last insn before the jump table 
  16472.            it uses.  Its assembler code normally has no need to use the second 
  16473.            operand, but you should incorporate it in the RTL pattern so that 
  16474.            the jump optimizer will not delete the table as unreachable code. 
  16475.  
  16476.  `save_stack_block' 
  16477.  `save_stack_function' 
  16478.  `save_stack_nonlocal' 
  16479.  `restore_stack_block' 
  16480.  `restore_stack_function' 
  16481.  `restore_stack_nonlocal' 
  16482.            Most machines save and restore the stack pointer by copying it to or 
  16483.            from an object of mode Pmode.  Do not define these patterns on such 
  16484.            machines. 
  16485.  
  16486.            Some machines require special handling for stack pointer saves and 
  16487.            restores.  On those machines, define the patterns corresponding to 
  16488.            the non-standard cases by using a define_expand ( see Expander 
  16489.            Definitions) that produces the required insns.  The three types of 
  16490.            saves and restores are: 
  16491.  
  16492.              1. `save_stack_block' saves the stack pointer at the start of a 
  16493.                 block that allocates a variable-sized object, and 
  16494.                 `restore_stack_block' restores the stack pointer when the block 
  16495.                 is exited. 
  16496.  
  16497.              2. `save_stack_function' and `restore_stack_function' do a similar 
  16498.                 job for the outermost block of a function and are used when the 
  16499.                 function allocates variable-sized objects or calls alloca. 
  16500.                 Only the epilogue uses the restored stack pointer, allowing a 
  16501.                 simpler save or restore sequence on some machines. 
  16502.  
  16503.              3. `save_stack_nonlocal' is used in functions that contain labels 
  16504.                 branched to by nested functions.  It saves the stack pointer in 
  16505.                 such a way that the inner function can use 
  16506.                 `restore_stack_nonlocal' to restore the stack pointer.  The 
  16507.                 compiler generates code to restore the frame and argument 
  16508.                 pointer registers, but some machines require saving and 
  16509.                 restoring additional data such as register window information 
  16510.                 or stack backchains.  Place insns in these patterns to save and 
  16511.                 restore any such required data. 
  16512.  
  16513.            When saving the stack pointer, operand 0 is the save area and 
  16514.            operand 1 is the stack pointer.  The mode used to allocate the save 
  16515.            area is the mode of operand 0.  You must specify an integral mode, 
  16516.            or VOIDmode if no save area is needed for a particular type of save 
  16517.            (either because no save is needed or because a machine-specific save 
  16518.            area can be used).  Operand 0 is the stack pointer and operand 1 is 
  16519.            the save area for restore operations.  If `save_stack_block' is 
  16520.            defined, operand 0 must not be VOIDmode since these saves can be 
  16521.            arbitrarily nested. 
  16522.  
  16523.            A save area is a mem that is at a constant offset from 
  16524.            virtual_stack_vars_rtx when the stack pointer is saved for use by 
  16525.            nonlocal gotos and a reg in the other two cases. 
  16526.  
  16527.  `allocate_stack' 
  16528.            Subtract (or add if STACK_GROWS_DOWNWARD is undefined) operand 0 
  16529.            from the stack pointer to create space for dynamically allocated 
  16530.            data. 
  16531.  
  16532.            Do not define this pattern if all that must be done is the 
  16533.            subtraction. Some machines require other operations such as stack 
  16534.            probes or maintaining the back chain.  Define this pattern to emit 
  16535.            those operations in addition to updating the stack pointer. 
  16536.  
  16537.  
  16538. ΓòÉΓòÉΓòÉ 20.8. When the Order of Patterns Matters ΓòÉΓòÉΓòÉ
  16539.  
  16540. Sometimes an insn can match more than one instruction pattern.  Then the 
  16541. pattern that appears first in the machine description is the one used. 
  16542. Therefore, more specific patterns (patterns that will match fewer things) and 
  16543. faster instructions (those that will produce better code when they do match) 
  16544. should usually go first in the description. 
  16545.  
  16546. In some cases the effect of ordering the patterns can be used to hide a pattern 
  16547. when it is not valid.  For example, the 68000 has an instruction for converting 
  16548. a fullword to floating point and another for converting a byte to floating 
  16549. point.  An instruction converting an integer to floating point could match 
  16550. either one.  We put the pattern to convert the fullword first to make sure that 
  16551. one will be used rather than the other.  (Otherwise a large integer might be 
  16552. generated as a single-byte immediate quantity, which would not work.) Instead 
  16553. of using this pattern ordering it would be possible to make the pattern for 
  16554. convert-a-byte smart enough to deal properly with any constant value. 
  16555.  
  16556.  
  16557. ΓòÉΓòÉΓòÉ 20.9. Interdependence of Patterns ΓòÉΓòÉΓòÉ
  16558.  
  16559. Every machine description must have a named pattern for each of the conditional 
  16560. branch names `bcond'.  The recognition template must always have the form 
  16561.  
  16562. (set (pc)
  16563.      (if_then_else (cond (cc0) (const_int 0))
  16564.                    (label_ref (match_operand 0 "" ""))
  16565.                    (pc)))
  16566.  
  16567. In addition, every machine description must have an anonymous pattern for each 
  16568. of the possible reverse-conditional branches.  Their templates look like 
  16569.  
  16570. (set (pc)
  16571.      (if_then_else (cond (cc0) (const_int 0))
  16572.                    (pc)
  16573.                    (label_ref (match_operand 0 "" ""))))
  16574.  
  16575. They are necessary because jump optimization can turn direct-conditional 
  16576. branches into reverse-conditional branches. 
  16577.  
  16578. It is often convenient to use the match_operator construct to reduce the number 
  16579. of patterns that must be specified for branches.  For example, 
  16580.  
  16581. (define_insn ""
  16582.   [(set (pc)
  16583.         (if_then_else (match_operator 0 "comparison_operator"
  16584.                                       [(cc0) (const_int 0)])
  16585.                       (pc)
  16586.                       (label_ref (match_operand 1 "" ""))))]
  16587.   "condition"
  16588.   "...")
  16589.  
  16590. In some cases machines support instructions identical except for the machine 
  16591. mode of one or more operands.  For example, there may be ``sign-extend 
  16592. halfword'' and ``sign-extend byte'' instructions whose patterns are 
  16593.  
  16594. (set (match_operand:SI 0 ...)
  16595.      (extend:SI (match_operand:HI 1 ...)))
  16596.  
  16597. (set (match_operand:SI 0 ...)
  16598.      (extend:SI (match_operand:QI 1 ...)))
  16599.  
  16600. Constant integers do not specify a machine mode, so an instruction to extend a 
  16601. constant value could match either pattern.  The pattern it actually will match 
  16602. is the one that appears first in the file.  For correct results, this must be 
  16603. the one for the widest possible mode (HImode, here).  If the pattern matches 
  16604. the QImode instruction, the results will be incorrect if the constant value 
  16605. does not actually fit that mode. 
  16606.  
  16607. Such instructions to extend constants are rarely generated because they are 
  16608. optimized away, but they do occasionally happen in nonoptimized compilations. 
  16609.  
  16610. If a constraint in a pattern allows a constant, the reload pass may replace a 
  16611. register with a constant permitted by the constraint in some cases.  Similarly 
  16612. for memory references.  Because of this substitution, you should not provide 
  16613. separate patterns for increment and decrement instructions.  Instead, they 
  16614. should be generated from the same pattern that supports register-register add 
  16615. insns by examining the operands and generating the appropriate machine 
  16616. instruction. 
  16617.  
  16618.  
  16619. ΓòÉΓòÉΓòÉ 20.10. Defining Jump Instruction Patterns ΓòÉΓòÉΓòÉ
  16620.  
  16621. For most machines, GNU CC assumes that the machine has a condition code. A 
  16622. comparison insn sets the condition code, recording the results of both signed 
  16623. and unsigned comparison of the given operands.  A separate branch insn tests 
  16624. the condition code and branches or not according its value. The branch insns 
  16625. come in distinct signed and unsigned flavors.  Many common machines, such as 
  16626. the Vax, the 68000 and the 32000, work this way. 
  16627.  
  16628. Some machines have distinct signed and unsigned compare instructions, and only 
  16629. one set of conditional branch instructions.  The easiest way to handle these 
  16630. machines is to treat them just like the others until the final stage where 
  16631. assembly code is written.  At this time, when outputting code for the compare 
  16632. instruction, peek ahead at the following branch using next_cc0_user (insn). 
  16633. (The variable insn refers to the insn being output, in the output-writing code 
  16634. in an instruction pattern.)  If the RTL says that is an unsigned branch, output 
  16635. an unsigned compare; otherwise output a signed compare.  When the branch itself 
  16636. is output, you can treat signed and unsigned branches identically. 
  16637.  
  16638. The reason you can do this is that GNU CC always generates a pair of 
  16639. consecutive RTL insns, possibly separated by note insns, one to set the 
  16640. condition code and one to test it, and keeps the pair inviolate until the end. 
  16641.  
  16642. To go with this technique, you must define the machine-description macro 
  16643. NOTICE_UPDATE_CC to do CC_STATUS_INIT; in other words, no compare instruction 
  16644. is superfluous. 
  16645.  
  16646. Some machines have compare-and-branch instructions and no condition code. A 
  16647. similar technique works for them.  When it is time to ``output'' a compare 
  16648. instruction, record its operands in two static variables.  When outputting the 
  16649. branch-on-condition-code instruction that follows, actually output a 
  16650. compare-and-branch instruction that uses the remembered operands. 
  16651.  
  16652. It also works to define patterns for compare-and-branch instructions. In 
  16653. optimizing compilation, the pair of compare and branch instructions will be 
  16654. combined according to these patterns.  But this does not happen if optimization 
  16655. is not requested.  So you must use one of the solutions above in addition to 
  16656. any special patterns you define. 
  16657.  
  16658. In many RISC machines, most instructions do not affect the condition code and 
  16659. there may not even be a separate condition code register.  On these machines, 
  16660. the restriction that the definition and use of the condition code be adjacent 
  16661. insns is not necessary and can prevent important optimizations.  For example, 
  16662. on the IBM RS/6000, there is a delay for taken branches unless the condition 
  16663. code register is set three instructions earlier than the conditional branch. 
  16664. The instruction scheduler cannot perform this optimization if it is not 
  16665. permitted to separate the definition and use of the condition code register. 
  16666.  
  16667. On these machines, do not use (cc0), but instead use a register to represent 
  16668. the condition code.  If there is a specific condition code register in the 
  16669. machine, use a hard register.  If the condition code or comparison result can 
  16670. be placed in any general register, or if there are multiple condition 
  16671. registers, use a pseudo register. 
  16672.  
  16673. On some machines, the type of branch instruction generated may depend on the 
  16674. way the condition code was produced; for example, on the 68k and Sparc, setting 
  16675. the condition code directly from an add or subtract instruction does not clear 
  16676. the overflow bit the way that a test instruction does, so a different branch 
  16677. instruction must be used for some conditional branches.  For machines that use 
  16678. (cc0), the set and use of the condition code must be adjacent (separated only 
  16679. by note insns) allowing flags in cc_status to be used. (See Condition Code.) 
  16680. Also, the comparison and branch insns can be located from each other by using 
  16681. the functions prev_cc0_setter and next_cc0_user. 
  16682.  
  16683. However, this is not true on machines that do not use (cc0).  On those 
  16684. machines, no assumptions can be made about the adjacency of the compare and 
  16685. branch insns and the above methods cannot be used.  Instead, we use the machine 
  16686. mode of the condition code register to record different formats of the 
  16687. condition code register. 
  16688.  
  16689. Registers used to store the condition code value should have a mode that is in 
  16690. class MODE_CC.  Normally, it will be CCmode.  If additional modes are required 
  16691. (as for the add example mentioned above in the Sparc), define the macro 
  16692. EXTRA_CC_MODES to list the additional modes required (see Condition Code). 
  16693. Also define EXTRA_CC_NAMES to list the names of those modes and SELECT_CC_MODE 
  16694. to choose a mode given an operand of a compare. 
  16695.  
  16696. If it is known during RTL generation that a different mode will be required 
  16697. (for example, if the machine has separate compare instructions for signed and 
  16698. unsigned quantities, like most IBM processors), they can be specified at that 
  16699. time. 
  16700.  
  16701. If the cases that require different modes would be made by instruction 
  16702. combination, the macro SELECT_CC_MODE determines which machine mode should be 
  16703. used for the comparison result.  The patterns should be written using that 
  16704. mode.  To support the case of the add on the Sparc discussed above, we have the 
  16705. pattern 
  16706.  
  16707. (define_insn ""
  16708.   [(set (reg:CC_NOOV 0)
  16709.         (compare:CC_NOOV
  16710.           (plus:SI (match_operand:SI 0 "register_operand" "%r")
  16711.                    (match_operand:SI 1 "arith_operand" "rI"))
  16712.           (const_int 0)))]
  16713.   ""
  16714.   "...")
  16715.  
  16716. The SELECT_CC_MODE macro on the Sparc returns CC_NOOVmode for comparisons whose 
  16717. argument is a plus. 
  16718.  
  16719.  
  16720. ΓòÉΓòÉΓòÉ 20.11. Canonicalization of Instructions ΓòÉΓòÉΓòÉ
  16721.  
  16722. There are often cases where multiple RTL expressions could represent an 
  16723. operation performed by a single machine instruction.  This situation is most 
  16724. commonly encountered with logical, branch, and multiply-accumulate 
  16725. instructions.  In such cases, the compiler attempts to convert these multiple 
  16726. RTL expressions into a single canonical form to reduce the number of insn 
  16727. patterns required. 
  16728.  
  16729. In addition to algebraic simplifications, following canonicalizations are 
  16730. performed: 
  16731.  
  16732.      For commutative and comparison operators, a constant is always made the 
  16733.       second operand.  If a machine only supports a constant as the second 
  16734.       operand, only patterns that match a constant in the second operand need 
  16735.       be supplied. 
  16736.  
  16737.       For these operators, if only one operand is a neg, not, mult, plus, or 
  16738.       minus expression, it will be the first operand. 
  16739.  
  16740.      For the compare operator, a constant is always the second operand on 
  16741.       machines where cc0 is used (see Jump Patterns).  On other machines, there 
  16742.       are rare cases where the compiler might want to construct a compare with 
  16743.       a constant as the first operand.  However, these cases are not common 
  16744.       enough for it to be worthwhile to provide a pattern matching a constant 
  16745.       as the first operand unless the machine actually has such an instruction. 
  16746.  
  16747.       An operand of neg, not, mult, plus, or minus is made the first operand 
  16748.       under the same conditions as above. 
  16749.  
  16750.      (minus x (const_int n)) is converted to (plus x (const_int -n)). 
  16751.  
  16752.      Within address computations (i.e., inside mem), a left shift is converted 
  16753.       into the appropriate multiplication by a power of two. 
  16754.  
  16755.       De`Morgan's Law is used to move bitwise negation inside a bitwise 
  16756.       logical-and or logical-or operation.  If this results in only one operand 
  16757.       being a not expression, it will be the first one. 
  16758.  
  16759.       A machine that has an instruction that performs a bitwise logical-and of 
  16760.       one operand with the bitwise negation of the other should specify the 
  16761.       pattern for that instruction as 
  16762.  
  16763.             (define_insn ""
  16764.               [(set (match_operand:m 0 ...)
  16765.                     (and:m (not:m (match_operand:m 1 ...))
  16766.                                  (match_operand:m 2 ...)))]
  16767.               "..."
  16768.               "...")
  16769.  
  16770.       Similarly, a pattern for a ``NAND'' instruction should be written 
  16771.  
  16772.             (define_insn ""
  16773.               [(set (match_operand:m 0 ...)
  16774.                     (ior:m (not:m (match_operand:m 1 ...))
  16775.                                  (not:m (match_operand:m 2 ...))))]
  16776.               "..."
  16777.               "...")
  16778.  
  16779.       In both cases, it is not necessary to include patterns for the many 
  16780.       logically equivalent RTL expressions. 
  16781.  
  16782.      The only possible RTL expressions involving both bitwise exclusive-or and 
  16783.       bitwise negation are (xor:m x y) and (not:m (xor:m x y)). 
  16784.  
  16785.      The sum of three items, one of which is a constant, will only appear in 
  16786.       the form 
  16787.  
  16788.             (plus:m (plus:m x y) constant)
  16789.  
  16790.      On machines that do not use cc0, (compare x (const_int 0)) will be 
  16791.       converted to x. 
  16792.  
  16793.      Equality comparisons of a group of bits (usually a single bit) with zero 
  16794.       will be written using zero_extract rather than the equivalent and or 
  16795.       sign_extract operations. 
  16796.  
  16797.  
  16798. ΓòÉΓòÉΓòÉ 20.12. Machine-Specific Peephole Optimizers ΓòÉΓòÉΓòÉ
  16799.  
  16800. In addition to instruction patterns the `md' file may contain definitions of 
  16801. machine-specific peephole optimizations. 
  16802.  
  16803. The combiner does not notice certain peephole optimizations when the data flow 
  16804. in the program does not suggest that it should try them.  For example, 
  16805. sometimes two consecutive insns related in purpose can be combined even though 
  16806. the second one does not appear to use a register computed in the first one.  A 
  16807. machine-specific peephole optimizer can detect such opportunities. 
  16808.  
  16809. A definition looks like this: 
  16810.  
  16811. (define_peephole
  16812.   [insn-pattern-1
  16813.    insn-pattern-2
  16814.    ...]
  16815.   "condition"
  16816.   "template"
  16817.   "optional insn-attributes")
  16818.  
  16819. The last string operand may be omitted if you are not using any 
  16820. machine-specific information in this machine description.  If present, it must 
  16821. obey the same rules as in a define_insn. 
  16822.  
  16823. In this skeleton, insn-pattern-1 and so on are patterns to match consecutive 
  16824. insns.  The optimization applies to a sequence of insns when insn-pattern-1 
  16825. matches the first one, insn-pattern-2 matches the next, and so on. 
  16826.  
  16827. Each of the insns matched by a peephole must also match a define_insn. 
  16828. Peepholes are checked only at the last stage just before code generation, and 
  16829. only optionally.  Therefore, any insn which would match a peephole but no 
  16830. define_insn will cause a crash in code generation in an unoptimized 
  16831. compilation, or at various optimization stages. 
  16832.  
  16833. The operands of the insns are matched with match_operands, match_operator, and 
  16834. match_dup, as usual.  What is not usual is that the operand numbers apply to 
  16835. all the insn patterns in the definition.  So, you can check for identical 
  16836. operands in two insns by using match_operand in one insn and match_dup in the 
  16837. other. 
  16838.  
  16839. The operand constraints used in match_operand patterns do not have any direct 
  16840. effect on the applicability of the peephole, but they will be validated 
  16841. afterward, so make sure your constraints are general enough to apply whenever 
  16842. the peephole matches.  If the peephole matches but the constraints are not 
  16843. satisfied, the compiler will crash. 
  16844.  
  16845. It is safe to omit constraints in all the operands of the peephole; or you can 
  16846. write constraints which serve as a double-check on the criteria previously 
  16847. tested. 
  16848.  
  16849. Once a sequence of insns matches the patterns, the condition is checked.  This 
  16850. is a C expression which makes the final decision whether to perform the 
  16851. optimization (we do so if the expression is nonzero).  If condition is omitted 
  16852. (in other words, the string is empty) then the optimization is applied to every 
  16853. sequence of insns that matches the patterns. 
  16854.  
  16855. The defined peephole optimizations are applied after register allocation is 
  16856. complete.  Therefore, the peephole definition can check which operands have 
  16857. ended up in which kinds of registers, just by looking at the operands. 
  16858.  
  16859. The way to refer to the operands in condition is to write operands[i] for 
  16860. operand number i (as matched by (match_operand i ...)).  Use the variable insn 
  16861. to refer to the last of the insns being matched; use prev_active_insn to find 
  16862. the preceding insns. 
  16863.  
  16864. When optimizing computations with intermediate results, you can use condition 
  16865. to match only when the intermediate results are not used elsewhere.  Use the C 
  16866. expression dead_or_set_p (insn, op), where insn is the insn in which you expect 
  16867. the value to be used for the last time (from the value of insn, together with 
  16868. use of prev_nonnote_insn), and op is the intermediate value (from operands[i]). 
  16869.  
  16870. Applying the optimization means replacing the sequence of insns with one new 
  16871. insn.  The template controls ultimate output of assembler code for this 
  16872. combined insn.  It works exactly like the template of a define_insn.  Operand 
  16873. numbers in this template are the same ones used in matching the original 
  16874. sequence of insns. 
  16875.  
  16876. The result of a defined peephole optimizer does not need to match any of the 
  16877. insn patterns in the machine description; it does not even have an opportunity 
  16878. to match them.  The peephole optimizer definition itself serves as the insn 
  16879. pattern to control how the insn is output. 
  16880.  
  16881. Defined peephole optimizers are run as assembler code is being output, so the 
  16882. insns they produce are never combined or rearranged in any way. 
  16883.  
  16884. Here is an example, taken from the 68000 machine description: 
  16885.  
  16886. (define_peephole
  16887.   [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
  16888.    (set (match_operand:DF 0 "register_operand" "=f")
  16889.         (match_operand:DF 1 "register_operand" "ad"))]
  16890.   "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
  16891.   "*
  16892. {
  16893.   rtx xoperands[2];
  16894.   xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  16895. #ifdef MOTOROLA
  16896.   output_asm_insn (\"move.l %1,(sp)\", xoperands);
  16897.   output_asm_insn (\"move.l %1,-(sp)\", operands);
  16898.   return \"fmove.d (sp)+,%0\";
  16899. #else
  16900.   output_asm_insn (\"movel %1,sp@\", xoperands);
  16901.   output_asm_insn (\"movel %1,sp@-\", operands);
  16902.   return \"fmoved sp@+,%0\";
  16903. #endif
  16904. }
  16905. ")
  16906.  
  16907. The effect of this optimization is to change 
  16908.  
  16909. jbsr _foobar
  16910. addql #4,sp
  16911. movel d1,sp@-
  16912. movel d0,sp@-
  16913. fmoved sp@+,fp0
  16914.  
  16915. into 
  16916.  
  16917. jbsr _foobar
  16918. movel d1,sp@
  16919. movel d0,sp@-
  16920. fmoved sp@+,fp0
  16921. insn-pattern-1 and so on look almost like the second 
  16922.  
  16923. operand of define_insn.  There is one important difference: the second operand 
  16924. of define_insn consists of one or more RTX's enclosed in square brackets. 
  16925. Usually, there is only one: then the same action can be written as an element 
  16926. of a define_peephole.  But when there are multiple actions in a define_insn, 
  16927. they are implicitly enclosed in a parallel.  Then you must explicitly write the 
  16928. parallel, and the square brackets within it, in the define_peephole.  Thus, if 
  16929. an insn pattern looks like this, 
  16930.  
  16931. (define_insn "divmodsi4"
  16932.   [(set (match_operand:SI 0 "general_operand" "=d")
  16933.         (div:SI (match_operand:SI 1 "general_operand" "0")
  16934.                 (match_operand:SI 2 "general_operand" "dmsK")))
  16935.    (set (match_operand:SI 3 "general_operand" "=d")
  16936.         (mod:SI (match_dup 1) (match_dup 2)))]
  16937.   "TARGET_68020"
  16938.   "divsl%.l %2,%3:%0")
  16939.  
  16940. then the way to mention this insn in a peephole is as follows: 
  16941.  
  16942. (define_peephole
  16943.   [...
  16944.    (parallel
  16945.     [(set (match_operand:SI 0 "general_operand" "=d")
  16946.           (div:SI (match_operand:SI 1 "general_operand" "0")
  16947.                   (match_operand:SI 2 "general_operand" "dmsK")))
  16948.      (set (match_operand:SI 3 "general_operand" "=d")
  16949.           (mod:SI (match_dup 1) (match_dup 2)))])
  16950.    ...]
  16951.   ...)
  16952.  
  16953.  
  16954. ΓòÉΓòÉΓòÉ 20.13. Defining RTL Sequences for Code Generation ΓòÉΓòÉΓòÉ
  16955.  
  16956. On some target machines, some standard pattern names for RTL generation cannot 
  16957. be handled with single insn, but a sequence of RTL insns can represent them. 
  16958. For these target machines, you can write a define_expand to specify how to 
  16959. generate the sequence of RTL. 
  16960.  
  16961. A define_expand is an RTL expression that looks almost like a define_insn; but, 
  16962. unlike the latter, a define_expand is used only for RTL generation and it can 
  16963. produce more than one RTL insn. 
  16964.  
  16965. A define_expand RTX has four operands: 
  16966.  
  16967.      The name.  Each define_expand must have a name, since the only use for it 
  16968.       is to refer to it by name. 
  16969.  
  16970.      The RTL template.  This is just like the RTL template for a 
  16971.       define_peephole in that it is a vector of RTL expressions each being one 
  16972.       insn. 
  16973.  
  16974.      The condition, a string containing a C expression.  This expression is 
  16975.       used to express how the availability of this pattern depends on 
  16976.       subclasses of target machine, selected by command-line options when GNU 
  16977.       CC is run.  This is just like the condition of a define_insn that has a 
  16978.       standard name.  Therefore, the condition (if present) may not depend on 
  16979.       the data in the insn being matched, but only the target-machine-type 
  16980.       flags.  The compiler needs to test these conditions during initialization 
  16981.       in order to learn exactly which named instructions are available in a 
  16982.       particular run. 
  16983.  
  16984.      The preparation statements, a string containing zero or more C statements 
  16985.       which are to be executed before RTL code is generated from the RTL 
  16986.       template. 
  16987.  
  16988.       Usually these statements prepare temporary registers for use as internal 
  16989.       operands in the RTL template, but they can also generate RTL insns 
  16990.       directly by calling routines such as emit_insn, etc. Any such insns 
  16991.       precede the ones that come from the RTL template. 
  16992.  
  16993.  Every RTL insn emitted by a define_expand must match some define_insn in the 
  16994.  machine description.  Otherwise, the compiler will crash when trying to 
  16995.  generate code for the insn or trying to optimize it. 
  16996.  
  16997.  The RTL template, in addition to controlling generation of RTL insns, also 
  16998.  describes the operands that need to be specified when this pattern is used. 
  16999.  In particular, it gives a predicate for each operand. 
  17000.  
  17001.  A true operand, which needs to be specified in order to generate RTL from the 
  17002.  pattern, should be described with a match_operand in its first occurrence in 
  17003.  the RTL template.  This enters information on the operand's predicate into the 
  17004.  tables that record such things.  GNU CC uses the information to preload the 
  17005.  operand into a register if that is required for valid RTL code.  If the 
  17006.  operand is referred to more than once, subsequent references should use 
  17007.  match_dup. 
  17008.  
  17009.  The RTL template may also refer to internal ``operands'' which are temporary 
  17010.  registers or labels used only within the sequence made by the define_expand. 
  17011.  Internal operands are substituted into the RTL template with match_dup, never 
  17012.  with match_operand.  The values of the internal operands are not passed in as 
  17013.  arguments by the compiler when it requests use of this pattern.  Instead, they 
  17014.  are computed within the pattern, in the preparation statements.  These 
  17015.  statements compute the values and store them into the appropriate elements of 
  17016.  operands so that match_dup can find them. 
  17017.  
  17018.  There are two special macros defined for use in the preparation statements: 
  17019.  DONE and FAIL.  Use them with a following semicolon, as a statement. 
  17020.  
  17021.  DONE 
  17022.            Use the DONE macro to end RTL generation for the pattern.  The only 
  17023.            RTL insns resulting from the pattern on this occasion will be those 
  17024.            already emitted by explicit calls to emit_insn within the 
  17025.            preparation statements; the RTL template will not be generated. 
  17026.  
  17027.  FAIL 
  17028.            Make the pattern fail on this occasion.  When a pattern fails, it 
  17029.            means that the pattern was not truly available.  The calling 
  17030.            routines in the compiler will try other strategies for code 
  17031.            generation using other patterns. 
  17032.  
  17033.            Failure is currently supported only for binary (addition, 
  17034.            multiplication, shifting, etc.) and bitfield (extv, extzv, and insv) 
  17035.            operations. 
  17036.  
  17037.  Here is an example, the definition of left-shift for the SPUR chip: 
  17038.  
  17039.   (define_expand "ashlsi3"
  17040.     [(set (match_operand:SI 0 "register_operand" "")
  17041.           (ashift:SI
  17042.             (match_operand:SI 1 "register_operand" "")
  17043.             (match_operand:SI 2 "nonmemory_operand" "")))]
  17044.     ""
  17045.     "
  17046.  
  17047.   {
  17048.     if (GET_CODE (operands[2]) != CONST_INT
  17049.         || (unsigned) INTVAL (operands[2]) > 3)
  17050.       FAIL;
  17051.   }")
  17052.  
  17053.  This example uses define_expand so that it can generate an RTL insn for 
  17054.  shifting when the shift-count is in the supported range of 0 to 3 but fail in 
  17055.  other cases where machine insns aren't available.  When it fails, the compiler 
  17056.  tries another strategy using different patterns (such as, a library call). 
  17057.  
  17058.  If the compiler were able to handle nontrivial condition-strings in patterns 
  17059.  with names, then it would be possible to use a define_insn in that case.  Here 
  17060.  is another case (zero-extension on the 68000) which makes more use of the 
  17061.  power of define_expand: 
  17062.  
  17063.   (define_expand "zero_extendhisi2"
  17064.     [(set (match_operand:SI 0 "general_operand" "")
  17065.           (const_int 0))
  17066.      (set (strict_low_part
  17067.             (subreg:HI
  17068.               (match_dup 0)
  17069.               0))
  17070.           (match_operand:HI 1 "general_operand" ""))]
  17071.     ""
  17072.     "operands[1] = make_safe_from (operands[1], operands[0]);")
  17073.  
  17074.  Here two RTL insns are generated, one to clear the entire output operand and 
  17075.  the other to copy the input operand into its low half.  This sequence is 
  17076.  incorrect if the input operand refers to [the old value of] the output 
  17077.  operand, so the preparation statement makes sure this isn't so.  The function 
  17078.  make_safe_from copies the operands[1] into a temporary register if it refers 
  17079.  to operands[0].  It does this by emitting another RTL insn. 
  17080.  
  17081.  Finally, a third example shows the use of an internal operand. Zero-extension 
  17082.  on the SPUR chip is done by and-ing the result against a halfword mask.  But 
  17083.  this mask cannot be represented by a const_int because the constant value is 
  17084.  too large to be legitimate on this machine.  So it must be copied into a 
  17085.  register with force_reg and then the register used in the and. 
  17086.  
  17087.   (define_expand "zero_extendhisi2"
  17088.     [(set (match_operand:SI 0 "register_operand" "")
  17089.           (and:SI (subreg:SI
  17090.                     (match_operand:HI 1 "register_operand" "")
  17091.                     0)
  17092.                   (match_dup 2)))]
  17093.     ""
  17094.     "operands[2]
  17095.        = force_reg (SImode, gen_rtx (CONST_INT,
  17096.                                      VOIDmode, 65535)); ")
  17097.  
  17098.  *Note:* If the define_expand is used to serve a standard binary or unary 
  17099.  arithmetic operation or a bitfield operation, then the last insn it generates 
  17100.  must not be a code_label, barrier or note.  It must be an insn, jump_insn or 
  17101.  call_insn.  If you don't need a real insn at the end, emit an insn to copy the 
  17102.  result of the operation into itself.  Such an insn will generate no code, but 
  17103.  it can avoid problems in the compiler. 
  17104.  
  17105.  
  17106. ΓòÉΓòÉΓòÉ 20.14. Defining How to Split Instructions ΓòÉΓòÉΓòÉ
  17107.  
  17108. There are two cases where you should specify how to split a pattern into 
  17109. multiple insns.  On machines that have instructions requiring delay slots (see 
  17110. Delay Slots) or that have instructions whose output is not available for 
  17111. multiple cycles (see Function Units), the compiler phases that optimize these 
  17112. cases need to be able to move insns into one-instruction delay slots.  However, 
  17113. some insns may generate more than one machine instruction.  These insns cannot 
  17114. be placed into a delay slot. 
  17115.  
  17116. Often you can rewrite the single insn as a list of individual insns, each 
  17117. corresponding to one machine instruction.  The disadvantage of doing so is that 
  17118. it will cause the compilation to be slower and require more space.  If the 
  17119. resulting insns are too complex, it may also suppress some optimizations.  The 
  17120. compiler splits the insn if there is a reason to believe that it might improve 
  17121. instruction or delay slot scheduling. 
  17122.  
  17123. The insn combiner phase also splits putative insns.  If three insns are merged 
  17124. into one insn with a complex expression that cannot be matched by some 
  17125. define_insn pattern, the combiner phase attempts to split the complex pattern 
  17126. into two insns that are recognized.  Usually it can break the complex pattern 
  17127. into two patterns by splitting out some subexpression.  However, in some other 
  17128. cases, such as performing an addition of a large constant in two insns on a 
  17129. RISC machine, the way to split the addition into two insns is 
  17130. machine-dependent. 
  17131.  
  17132. The define_split definition tells the compiler how to split a complex insn into 
  17133. several simpler insns.  It looks like this: 
  17134.  
  17135. (define_split
  17136.   [insn-pattern]
  17137.   "condition"
  17138.   [new-insn-pattern-1
  17139.    new-insn-pattern-2
  17140.    ...]
  17141.   "preparation statements")
  17142.  
  17143. insn-pattern is a pattern that needs to be split and condition is the final 
  17144. condition to be tested, as in a define_insn.  When an insn matching 
  17145. insn-pattern and satisfying condition is found, it is replaced in the insn list 
  17146. with the insns given by new-insn-pattern-1, new-insn-pattern-2, etc. 
  17147.  
  17148. The preparation statements are similar to those statements that are specified 
  17149. for define_expand (see Expander Definitions) and are executed before the new 
  17150. RTL is generated to prepare for the generated code or emit some insns whose 
  17151. pattern is not fixed.  Unlike those in define_expand, however, these statements 
  17152. must not generate any new pseudo-registers.  Once reload has completed, they 
  17153. also must not allocate any space in the stack frame. 
  17154.  
  17155. Patterns are matched against insn-pattern in two different circumstances.  If 
  17156. an insn needs to be split for delay slot scheduling or insn scheduling, the 
  17157. insn is already known to be valid, which means that it must have been matched 
  17158. by some define_insn and, if reload_completed is non-zero, is known to satisfy 
  17159. the constraints of that define_insn.  In that case, the new insn patterns must 
  17160. also be insns that are matched by some define_insn and, if reload_completed is 
  17161. non-zero, must also satisfy the constraints of those definitions. 
  17162.  
  17163. As an example of this usage of define_split, consider the following example 
  17164. from `a29k.md', which splits a sign_extend from HImode to SImode into a pair of 
  17165. shift insns: 
  17166.  
  17167. (define_split
  17168.   [(set (match_operand:SI 0 "gen_reg_operand" "")
  17169.         (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
  17170.   ""
  17171.   [(set (match_dup 0)
  17172.         (ashift:SI (match_dup 1)
  17173.                    (const_int 16)))
  17174.    (set (match_dup 0)
  17175.         (ashiftrt:SI (match_dup 0)
  17176.                      (const_int 16)))]
  17177.   "
  17178. { operands[1] = gen_lowpart (SImode, operands[1]); }")
  17179.  
  17180. When the combiner phase tries to split an insn pattern, it is always the case 
  17181. that the pattern is not matched by any define_insn. The combiner pass first 
  17182. tries to split a single set expression and then the same set expression inside 
  17183. a parallel, but followed by a clobber of a pseudo-reg to use as a scratch 
  17184. register.  In these cases, the combiner expects exactly two new insn patterns 
  17185. to be generated.  It will verify that these patterns match some define_insn 
  17186. definitions, so you need not do this test in the define_split (of course, there 
  17187. is no point in writing a define_split that will never produce insns that 
  17188. match). 
  17189.  
  17190. Here is an example of this use of define_split, taken from `rs6000.md': 
  17191.  
  17192. (define_split
  17193.   [(set (match_operand:SI 0 "gen_reg_operand" "")
  17194.         (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
  17195.                  (match_operand:SI 2 "non_add_cint_operand" "")))]
  17196.   ""
  17197.   [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
  17198.    (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
  17199. "
  17200. {
  17201.   int low = INTVAL (operands[2]) & 0xffff;
  17202.   int high = (unsigned) INTVAL (operands[2]) >> 16;
  17203.  
  17204.   if (low & 0x8000)
  17205.     high++, low |= 0xffff0000;
  17206.  
  17207.   operands[3] = gen_rtx (CONST_INT, VOIDmode, high << 16);
  17208.   operands[4] = gen_rtx (CONST_INT, VOIDmode, low);
  17209. }")
  17210.  
  17211. Here the predicate non_add_cint_operand matches any const_int that is not a 
  17212. valid operand of a single add insn.  The add with the smaller displacement is 
  17213. written so that it can be substituted into the address of a subsequent 
  17214. operation. 
  17215.  
  17216. An example that uses a scratch register, from the same file, generates an 
  17217. equality comparison of a register and a large constant: 
  17218.  
  17219. (define_split
  17220.   [(set (match_operand:CC 0 "cc_reg_operand" "")
  17221.         (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
  17222.                     (match_operand:SI 2 "non_short_cint_operand" "")))
  17223.    (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
  17224.   "find_single_use (operands[0], insn, 0)
  17225.    && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
  17226.        || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
  17227.   [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
  17228.    (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
  17229.   "
  17230. {
  17231.   /* Get the constant we are comparing against, C, and see what it
  17232.      looks like sign-extended to 16 bits.  Then see what constant
  17233.      could be XOR'ed with C to get the sign-extended value.  */
  17234.  
  17235.   int c = INTVAL (operands[2]);
  17236.   int sextc = (c << 16) >> 16;
  17237.   int xorv = c ^ sextc;
  17238.  
  17239.   operands[4] = gen_rtx (CONST_INT, VOIDmode, xorv);
  17240.   operands[5] = gen_rtx (CONST_INT, VOIDmode, sextc);
  17241. }")
  17242.  
  17243. To avoid confusion, don't write a single define_split that accepts some insns 
  17244. that match some define_insn as well as some insns that don't.  Instead, write 
  17245. two separate define_split definitions, one for the insns that are valid and one 
  17246. for the insns that are not valid. 
  17247.  
  17248.  
  17249. ΓòÉΓòÉΓòÉ 20.15. Instruction Attributes ΓòÉΓòÉΓòÉ
  17250.  
  17251. In addition to describing the instruction supported by the target machine, the 
  17252. `md' file also defines a group of attributes and a set of values for each. 
  17253. Every generated insn is assigned a value for each attribute. One possible 
  17254. attribute would be the effect that the insn has on the machine's condition 
  17255. code.  This attribute can then be used by NOTICE_UPDATE_CC to track the 
  17256. condition codes. 
  17257.  
  17258.  Defining Attributes                     Specifying attributes and their 
  17259.                                          values. 
  17260.  Expressions                             Valid expressions for attribute 
  17261.                                          values. 
  17262.  Tagging Insns                           Assigning attribute values to insns. 
  17263.  Attr Example                            An example of assigning attributes. 
  17264.  Insn Lengths                            Computing the length of insns. 
  17265.  Constant Attributes                     Defining attributes that are constant. 
  17266.  Delay Slots                             Defining delay slots required for a 
  17267.                                          machine. 
  17268.  Function Units                          Specifying information for insn 
  17269.                                          scheduling. 
  17270.  
  17271.  
  17272. ΓòÉΓòÉΓòÉ 20.15.1. Defining Attributes and their Values ΓòÉΓòÉΓòÉ
  17273.  
  17274. The define_attr expression is used to define each attribute required by the 
  17275. target machine.  It looks like: 
  17276.  
  17277. (define_attr name list-of-values default)
  17278.  
  17279. name is a string specifying the name of the attribute being defined. 
  17280.  
  17281. list-of-values is either a string that specifies a comma-separated list of 
  17282. values that can be assigned to the attribute, or a null string to indicate that 
  17283. the attribute takes numeric values. 
  17284.  
  17285. default is an attribute expression that gives the value of this attribute for 
  17286. insns that match patterns whose definition does not include an explicit value 
  17287. for this attribute.  See Attr Example, for more information on the handling of 
  17288. defaults.  See Constant Attributes, for information on attributes that do not 
  17289. depend on any particular insn. 
  17290.  
  17291. For each defined attribute, a number of definitions are written to the 
  17292. `insn-attr.h' file.  For cases where an explicit set of values is specified for 
  17293. an attribute, the following are defined: 
  17294.  
  17295.      A `#define' is written for the symbol `HAVE_ATTR_name'. 
  17296.  
  17297.      An enumeral class is defined for `attr_name' with elements of the form 
  17298.       `upper-name_upper-value' where the attribute name and value are first 
  17299.       converted to upper case. 
  17300.  
  17301.      A function `get_attr_name' is defined that is passed an insn and returns 
  17302.       the attribute value for that insn. 
  17303.  
  17304.  For example, if the following is present in the `md' file: 
  17305.  
  17306.   (define_attr "type" "branch,fp,load,store,arith" ...)
  17307.  
  17308.  the following lines will be written to the file `insn-attr.h'. 
  17309.  
  17310.   #define HAVE_ATTR_type
  17311.   enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
  17312.                    TYPE_STORE, TYPE_ARITH};
  17313.   extern enum attr_type get_attr_type ();
  17314.  
  17315.  If the attribute takes numeric values, no enum type will be defined and the 
  17316.  function to obtain the attribute's value will return int. 
  17317.  
  17318.  
  17319. ΓòÉΓòÉΓòÉ 20.15.2. Attribute Expressions ΓòÉΓòÉΓòÉ
  17320.  
  17321. RTL expressions used to define attributes use the codes described above plus a 
  17322. few specific to attribute definitions, to be discussed below. Attribute value 
  17323. expressions must have one of the following forms: 
  17324.  
  17325.  (const_int i) 
  17326.            The integer i specifies the value of a numeric attribute.  i must be 
  17327.            non-negative. 
  17328.  
  17329.            The value of a numeric attribute can be specified either with a 
  17330.            const_int or as an integer represented as a string in const_string, 
  17331.            eq_attr (see below), and set_attr (see Tagging Insns) expressions. 
  17332.  
  17333.  (const_string value) 
  17334.            The string value specifies a constant attribute value. If value is 
  17335.            specified as `"*"', it means that the default value of the attribute 
  17336.            is to be used for the insn containing this expression. `"*"' 
  17337.            obviously cannot be used in the default expression of a define_attr. 
  17338.  
  17339.            If the attribute whose value is being specified is numeric, value 
  17340.            must be a string containing a non-negative integer (normally 
  17341.            const_int would be used in this case).  Otherwise, it must contain 
  17342.            one of the valid values for the attribute. 
  17343.  
  17344.  (if_then_else test true-value false-value) 
  17345.            test specifies an attribute test, whose format is defined below. The 
  17346.            value of this expression is true-value if test is true, otherwise it 
  17347.            is false-value. 
  17348.  
  17349.  (cond [test1 value1 ...] default) 
  17350.            The first operand of this expression is a vector containing an even 
  17351.            number of expressions and consisting of pairs of test and value 
  17352.            expressions.  The value of the cond expression is that of the value 
  17353.            corresponding to the first true test expression.  If none of the 
  17354.            test expressions are true, the value of the cond expression is that 
  17355.            of the default expression. 
  17356.  
  17357.  test expressions can have one of the following forms: 
  17358.  
  17359.  (const_int i) 
  17360.            This test is true if i is non-zero and false otherwise. 
  17361.  
  17362.  (not test) 
  17363.  (ior test1 test2) 
  17364.  (and test1 test2) 
  17365.            These tests are true if the indicated logical function is true. 
  17366.  
  17367.  (match_operand:m n pred constraints) 
  17368.            This test is true if operand n of the insn whose attribute value is 
  17369.            being determined has mode m (this part of the test is ignored if m 
  17370.            is VOIDmode) and the function specified by the string pred returns a 
  17371.            non-zero value when passed operand n and mode m (this part of the 
  17372.            test is ignored if pred is the null string). 
  17373.  
  17374.            The constraints operand is ignored and should be the null string. 
  17375.  
  17376.  (le arith1 arith2) 
  17377.  (leu arith1 arith2) 
  17378.  (lt arith1 arith2) 
  17379.  (ltu arith1 arith2) 
  17380.  (gt arith1 arith2) 
  17381.  (gtu arith1 arith2) 
  17382.  (ge arith1 arith2) 
  17383.  (geu arith1 arith2) 
  17384.  (ne arith1 arith2) 
  17385.  (eq arith1 arith2) 
  17386.            These tests are true if the indicated comparison of the two 
  17387.            arithmetic expressions is true.  Arithmetic expressions are formed 
  17388.            with plus, minus, mult, div, mod, abs, neg, and, ior, xor, not, 
  17389.            ashift, lshiftrt, and ashiftrt expressions. 
  17390.  
  17391.            const_int and symbol_ref are always valid terms ( see Insn 
  17392.            Lengths,for additional forms).  symbol_ref is a string denoting a C 
  17393.            expression that yields an int when evaluated by the `get_attr_...' 
  17394.            routine.  It should normally be a global variable. 
  17395.  
  17396.  (eq_attr name value) 
  17397.            name is a string specifying the name of an attribute. 
  17398.  
  17399.            value is a string that is either a valid value for attribute name, a 
  17400.            comma-separated list of values, or `!' followed by a value or list. 
  17401.            If value does not begin with a `!', this test is true if the value 
  17402.            of the name attribute of the current insn is in the list specified 
  17403.            by value.  If value begins with a `!', this test is true if the 
  17404.            attribute's value is not in the specified list. 
  17405.  
  17406.            For example, 
  17407.  
  17408.                       (eq_attr "type" "load,store")
  17409.  
  17410.            is equivalent to 
  17411.  
  17412.                       (ior (eq_attr "type" "load") (eq_attr "type" "store"))
  17413.  
  17414.            If name specifies an attribute of `alternative', it refers to the 
  17415.            value of the compiler variable which_alternative (see Output 
  17416.            Statement) and the values must be small integers.  For example, 
  17417.  
  17418.                       (eq_attr "alternative" "2,3")
  17419.  
  17420.            is equivalent to 
  17421.  
  17422.                       (ior (eq (symbol_ref "which_alternative") (const_int 2))
  17423.                            (eq (symbol_ref "which_alternative") (const_int 3)))
  17424.  
  17425.            Note that, for most attributes, an eq_attr test is simplified in 
  17426.            cases where the value of the attribute being tested is known for all 
  17427.            insns matching a particular pattern.  This is by far the most common 
  17428.            case. 
  17429.  
  17430.  (attr_flag name) 
  17431.            The value of an attr_flag expression is true if the flag specified 
  17432.            by name is true for the insn currently being scheduled. 
  17433.  
  17434.            name is a string specifying one of a fixed set of flags to test. 
  17435.            Test the flags forward and backward to determine the direction of a 
  17436.            conditional branch.  Test the flags very_likely, likely, 
  17437.            very_unlikely, and unlikely to determine if a conditional branch is 
  17438.            expected to be taken. 
  17439.  
  17440.            If the very_likely flag is true, then the likely flag is also true. 
  17441.            Likewise for the very_unlikely and unlikely flags. 
  17442.  
  17443.            This example describes a conditional branch delay slot which can be 
  17444.            nullified for forward branches that are taken (annul-true) or for 
  17445.            backward branches which are not taken (annul-false). 
  17446.  
  17447.                       (define_delay (eq_attr "type" "cbranch")
  17448.                         [(eq_attr "in_branch_delay" "true")
  17449.                          (and (eq_attr "in_branch_delay" "true")
  17450.                               (attr_flag "forward"))
  17451.                          (and (eq_attr "in_branch_delay" "true")
  17452.                               (attr_flag "backward"))])
  17453.  
  17454.            The forward and backward flags are false if the current insn being 
  17455.            scheduled is not a conditional branch. 
  17456.  
  17457.            The very_likely and likely flags are true if the insn being 
  17458.            scheduled is not a conditional branch.  The The very_unlikely and 
  17459.            unlikely flags are false if the insn being scheduled is not a 
  17460.            conditional branch. 
  17461.  
  17462.            attr_flag is only used during delay slot scheduling and has no 
  17463.            meaning to other passes of the compiler. 
  17464.  
  17465.  
  17466. ΓòÉΓòÉΓòÉ 20.15.3. Assigning Attribute Values to Insns ΓòÉΓòÉΓòÉ
  17467.  
  17468. The value assigned to an attribute of an insn is primarily determined by which 
  17469. pattern is matched by that insn (or which define_peephole generated it).  Every 
  17470. define_insn and define_peephole can have an optional last argument to specify 
  17471. the values of attributes for matching insns.  The value of any attribute not 
  17472. specified in a particular insn is set to the default value for that attribute, 
  17473. as specified in its define_attr.  Extensive use of default values for 
  17474. attributes permits the specification of the values for only one or two 
  17475. attributes in the definition of most insn patterns, as seen in the example in 
  17476. the next section. 
  17477.  
  17478. The optional last argument of define_insn and define_peephole is a vector of 
  17479. expressions, each of which defines the value for a single attribute.  The most 
  17480. general way of assigning an attribute's value is to use a set expression whose 
  17481. first operand is an attr expression giving the name of the attribute being set. 
  17482. The second operand of the set is an attribute expression (see Expressions) 
  17483. giving the value of the attribute. 
  17484.  
  17485. When the attribute value depends on the `alternative' attribute (i.e., which is 
  17486. the applicable alternative in the constraint of the insn), the 
  17487. set_attr_alternative expression can be used.  It allows the specification of a 
  17488. vector of attribute expressions, one for each alternative. 
  17489.  
  17490. When the generality of arbitrary attribute expressions is not required, the 
  17491. simpler set_attr expression can be used, which allows specifying a string 
  17492. giving either a single attribute value or a list of attribute values, one for 
  17493. each alternative. 
  17494.  
  17495. The form of each of the above specifications is shown below.  In each case, 
  17496. name is a string specifying the attribute to be set. 
  17497.  
  17498.  (set_attr name value-string) 
  17499.            value-string is either a string giving the desired attribute value, 
  17500.            or a string containing a comma-separated list giving the values for 
  17501.            succeeding alternatives.  The number of elements must match the 
  17502.            number of alternatives in the constraint of the insn pattern. 
  17503.  
  17504.            Note that it may be useful to specify `*' for some alternative, in 
  17505.            which case the attribute will assume its default value for insns 
  17506.            matching that alternative. 
  17507.  
  17508.  (set_attr_alternative name [value1 value2 ...]) 
  17509.            Depending on the alternative of the insn, the value will be one of 
  17510.            the specified values.  This is a shorthand for using a cond with 
  17511.            tests on the `alternative' attribute. 
  17512.  
  17513.  (set (attr name) value) 
  17514.            The first operand of this set must be the special RTL expression 
  17515.            attr, whose sole operand is a string giving the name of the 
  17516.            attribute being set.  value is the value of the attribute. 
  17517.  
  17518.  The following shows three different ways of representing the same attribute 
  17519.  value specification: 
  17520.  
  17521.   (set_attr "type" "load,store,arith")
  17522.  
  17523.   (set_attr_alternative "type"
  17524.                         [(const_string "load") (const_string "store")
  17525.                          (const_string "arith")])
  17526.  
  17527.   (set (attr "type")
  17528.        (cond [(eq_attr "alternative" "1") (const_string "load")
  17529.               (eq_attr "alternative" "2") (const_string "store")]
  17530.              (const_string "arith")))
  17531.  
  17532.  The define_asm_attributes expression provides a mechanism to specify the 
  17533.  attributes assigned to insns produced from an asm statement.  It has the form: 
  17534.  
  17535.   (define_asm_attributes [attr-sets])
  17536.  
  17537.  where attr-sets is specified the same as for both the define_insn and the 
  17538.  define_peephole expressions. 
  17539.  
  17540.  These values will typically be the ``worst case'' attribute values.  For 
  17541.  example, they might indicate that the condition code will be clobbered. 
  17542.  
  17543.  A specification for a length attribute is handled specially.  The way to 
  17544.  compute the length of an asm insn is to multiply the length specified in the 
  17545.  expression define_asm_attributes by the number of machine instructions 
  17546.  specified in the asm statement, determined by counting the number of 
  17547.  semicolons and newlines in the string.  Therefore, the value of the length 
  17548.  attribute specified in a define_asm_attributes should be the maximum possible 
  17549.  length of a single machine instruction. 
  17550.  
  17551.  
  17552. ΓòÉΓòÉΓòÉ 20.15.4. Example of Attribute Specifications ΓòÉΓòÉΓòÉ
  17553.  
  17554. The judicious use of defaulting is important in the efficient use of insn 
  17555. attributes.  Typically, insns are divided into types and an attribute, 
  17556. customarily called type, is used to represent this value.  This attribute is 
  17557. normally used only to define the default value for other attributes.  An 
  17558. example will clarify this usage. 
  17559.  
  17560. Assume we have a RISC machine with a condition code and in which only full-word 
  17561. operations are performed in registers.  Let us assume that we can divide all 
  17562. insns into loads, stores, (integer) arithmetic operations, floating point 
  17563. operations, and branches. 
  17564.  
  17565. Here we will concern ourselves with determining the effect of an insn on the 
  17566. condition code and will limit ourselves to the following possible effects:  The 
  17567. condition code can be set unpredictably (clobbered), not be changed, be set to 
  17568. agree with the results of the operation, or only changed if the item previously 
  17569. set into the condition code has been modified. 
  17570.  
  17571. Here is part of a sample `md' file for such a machine: 
  17572.  
  17573. (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
  17574.  
  17575. (define_attr "cc" "clobber,unchanged,set,change0"
  17576.              (cond [(eq_attr "type" "load")
  17577.                         (const_string "change0")
  17578.                     (eq_attr "type" "store,branch")
  17579.                         (const_string "unchanged")
  17580.                     (eq_attr "type" "arith")
  17581.                         (if_then_else (match_operand:SI 0 "" "")
  17582.                                       (const_string "set")
  17583.                                       (const_string "clobber"))]
  17584.                    (const_string "clobber")))
  17585.  
  17586. (define_insn ""
  17587.   [(set (match_operand:SI 0 "general_operand" "=r,r,m")
  17588.         (match_operand:SI 1 "general_operand" "r,m,r"))]
  17589.   ""
  17590.   "@
  17591.    move %0,%1
  17592.    load %0,%1
  17593.    store %0,%1"
  17594.   [(set_attr "type" "arith,load,store")])
  17595.  
  17596. Note that we assume in the above example that arithmetic operations performed 
  17597. on quantities smaller than a machine word clobber the condition code since they 
  17598. will set the condition code to a value corresponding to the full-word result. 
  17599.  
  17600.  
  17601. ΓòÉΓòÉΓòÉ 20.15.5. Computing the Length of an Insn ΓòÉΓòÉΓòÉ
  17602.  
  17603. For many machines, multiple types of branch instructions are provided, each for 
  17604. different length branch displacements.  In most cases, the assembler will 
  17605. choose the correct instruction to use.  However, when the assembler cannot do 
  17606. so, GCC can when a special attribute, the `length' attribute, is defined.  This 
  17607. attribute must be defined to have numeric values by specifying a null string in 
  17608. its define_attr. 
  17609.  
  17610. In the case of the `length' attribute, two additional forms of arithmetic terms 
  17611. are allowed in test expressions: 
  17612.  
  17613.  (match_dup n) 
  17614.            This refers to the address of operand n of the current insn, which 
  17615.            must be a label_ref. 
  17616.  
  17617.  (pc) 
  17618.            This refers to the address of the current insn.  It might have been 
  17619.            more consistent with other usage to make this the address of the 
  17620.            next insn but this would be confusing because the length of the 
  17621.            current insn is to be computed. 
  17622.  
  17623.  For normal insns, the length will be determined by value of the `length' 
  17624.  attribute.  In the case of addr_vec and addr_diff_vec insn patterns, the 
  17625.  length is computed as the number of vectors multiplied by the size of each 
  17626.  vector. 
  17627.  
  17628.  Lengths are measured in addressable storage units (bytes). 
  17629.  
  17630.  The following macros can be used to refine the length computation: 
  17631.  
  17632.  FIRST_INSN_ADDRESS 
  17633.            When the length insn attribute is used, this macro specifies the 
  17634.            value to be assigned to the address of the first insn in a function. 
  17635.            If not specified, 0 is used. 
  17636.  
  17637.  ADJUST_INSN_LENGTH (insn, length) 
  17638.            If defined, modifies the length assigned to instruction insn as a 
  17639.            function of the context in which it is used.  length is an lvalue 
  17640.            that contains the initially computed length of the insn and should 
  17641.            be updated with the correct length of the insn.  If updating is 
  17642.            required, insn must not be a varying-length insn. 
  17643.  
  17644.            This macro will normally not be required.  A case in which it is 
  17645.            required is the ROMP.  On this machine, the size of an addr_vec insn 
  17646.            must be increased by two to compensate for the fact that alignment 
  17647.            may be required. 
  17648.  
  17649.  The routine that returns get_attr_length (the value of the length attribute) 
  17650.  can be used by the output routine to determine the form of the branch 
  17651.  instruction to be written, as the example below illustrates. 
  17652.  
  17653.  As an example of the specification of variable-length branches, consider the 
  17654.  IBM 360.  If we adopt the convention that a register will be set to the 
  17655.  starting address of a function, we can jump to labels within 4k of the start 
  17656.  using a four-byte instruction.  Otherwise, we need a six-byte sequence to load 
  17657.  the address from memory and then branch to it. 
  17658.  
  17659.  On such a machine, a pattern for a branch instruction might be specified as 
  17660.  follows: 
  17661.  
  17662.   (define_insn "jump"
  17663.     [(set (pc)
  17664.           (label_ref (match_operand 0 "" "")))]
  17665.     ""
  17666.     "*
  17667.   {
  17668.      return (get_attr_length (insn) == 4
  17669.              ? \"b %l0\" : \"l r15,=a(%l0); br r15\");
  17670.   }"
  17671.     [(set (attr "length") (if_then_else (lt (match_dup 0) (const_int 4096))
  17672.                                         (const_int 4)
  17673.                                         (const_int 6)))])
  17674.  
  17675.  
  17676. ΓòÉΓòÉΓòÉ 20.15.6. Constant Attributes ΓòÉΓòÉΓòÉ
  17677.  
  17678. A special form of define_attr, where the expression for the default value is a 
  17679. const expression, indicates an attribute that is constant for a given run of 
  17680. the compiler.  Constant attributes may be used to specify which variety of 
  17681. processor is used.  For example, 
  17682.  
  17683. (define_attr "cpu" "m88100,m88110,m88000"
  17684.  (const
  17685.   (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
  17686.          (symbol_ref "TARGET_88110") (const_string "m88110")]
  17687.         (const_string "m88000"))))
  17688.  
  17689. (define_attr "memory" "fast,slow"
  17690.  (const
  17691.   (if_then_else (symbol_ref "TARGET_FAST_MEM")
  17692.                 (const_string "fast")
  17693.                 (const_string "slow"))))
  17694.  
  17695. The routine generated for constant attributes has no parameters as it does not 
  17696. depend on any particular insn.  RTL expressions used to define the value of a 
  17697. constant attribute may use the symbol_ref form, but may not use either the 
  17698. match_operand form or eq_attr forms involving insn attributes. 
  17699.  
  17700.  
  17701. ΓòÉΓòÉΓòÉ 20.15.7. Delay Slot Scheduling ΓòÉΓòÉΓòÉ
  17702.  
  17703. The insn attribute mechanism can be used to specify the requirements for delay 
  17704. slots, if any, on a target machine.  An instruction is said to require a delay 
  17705. slot if some instructions that are physically after the instruction are 
  17706. executed as if they were located before it. Classic examples are branch and 
  17707. call instructions, which often execute the following instruction before the 
  17708. branch or call is performed. 
  17709.  
  17710. On some machines, conditional branch instructions can optionally annul 
  17711. instructions in the delay slot.  This means that the instruction will not be 
  17712. executed for certain branch outcomes.  Both instructions that annul if the 
  17713. branch is true and instructions that annul if the branch is false are 
  17714. supported. 
  17715.  
  17716. Delay slot scheduling differs from instruction scheduling in that determining 
  17717. whether an instruction needs a delay slot is dependent only on the type of 
  17718. instruction being generated, not on data flow between the instructions.  See 
  17719. the next section for a discussion of data-dependent instruction scheduling. 
  17720.  
  17721. The requirement of an insn needing one or more delay slots is indicated via the 
  17722. define_delay expression.  It has the following form: 
  17723.  
  17724. (define_delay test
  17725.               [delay-1 annul-true-1 annul-false-1
  17726.                delay-2 annul-true-2 annul-false-2
  17727.                ...])
  17728.  
  17729. test is an attribute test that indicates whether this define_delay applies to a 
  17730. particular insn.  If so, the number of required delay slots is determined by 
  17731. the length of the vector specified as the second argument.  An insn placed in 
  17732. delay slot n must satisfy attribute test delay-n.  annul-true-n is an attribute 
  17733. test that specifies which insns may be annulled if the branch is true. 
  17734. Similarly, annul-false-n specifies which insns in the delay slot may be 
  17735. annulled if the branch is false.  If annulling is not supported for that delay 
  17736. slot, (nil) should be coded. 
  17737.  
  17738. For example, in the common case where branch and call insns require a single 
  17739. delay slot, which may contain any insn other than a branch or call, the 
  17740. following would be placed in the `md' file: 
  17741.  
  17742. (define_delay (eq_attr "type" "branch,call")
  17743.               [(eq_attr "type" "!branch,call") (nil) (nil)])
  17744.  
  17745. Multiple define_delay expressions may be specified.  In this case, each such 
  17746. expression specifies different delay slot requirements and there must be no 
  17747. insn for which tests in two define_delay expressions are both true. 
  17748.  
  17749. For example, if we have a machine that requires one delay slot for branches but 
  17750. two for calls,  no delay slot can contain a branch or call insn, and any valid 
  17751. insn in the delay slot for the branch can be annulled if the branch is true, we 
  17752. might represent this as follows: 
  17753.  
  17754. (define_delay (eq_attr "type" "branch")
  17755.    [(eq_attr "type" "!branch,call")
  17756.     (eq_attr "type" "!branch,call")
  17757.     (nil)])
  17758.  
  17759. (define_delay (eq_attr "type" "call")
  17760.               [(eq_attr "type" "!branch,call") (nil) (nil)
  17761.                (eq_attr "type" "!branch,call") (nil) (nil)])
  17762.  
  17763.  
  17764. ΓòÉΓòÉΓòÉ 20.15.8. Specifying Function Units ΓòÉΓòÉΓòÉ
  17765.  
  17766. On most RISC machines, there are instructions whose results are not available 
  17767. for a specific number of cycles.  Common cases are instructions that load data 
  17768. from memory.  On many machines, a pipeline stall will result if the data is 
  17769. referenced too soon after the load instruction. 
  17770.  
  17771. In addition, many newer microprocessors have multiple function units, usually 
  17772. one for integer and one for floating point, and often will incur pipeline 
  17773. stalls when a result that is needed is not yet ready. 
  17774.  
  17775. The descriptions in this section allow the specification of how much time must 
  17776. elapse between the execution of an instruction and the time when its result is 
  17777. used.  It also allows specification of when the execution of an instruction 
  17778. will delay execution of similar instructions due to function unit conflicts. 
  17779.  
  17780. For the purposes of the specifications in this section, a machine is divided 
  17781. into function units, each of which execute a specific class of instructions in 
  17782. first-in-first-out order.  Function units that accept one instruction each 
  17783. cycle and allow a result to be used in the succeeding instruction (usually via 
  17784. forwarding) need not be specified. Classic RISC microprocessors will normally 
  17785. have a single function unit, which we can call `memory'.  The newer 
  17786. ``superscalar'' processors will often have function units for floating point 
  17787. operations, usually at least a floating point adder and multiplier. 
  17788.  
  17789. Each usage of a function units by a class of insns is specified with a 
  17790. define_function_unit expression, which looks like this: 
  17791.  
  17792. (define_function_unit name multiplicity simultaneity
  17793.                       test ready-delay issue-delay
  17794.                      [conflict-list])
  17795.  
  17796. name is a string giving the name of the function unit. 
  17797.  
  17798. multiplicity is an integer specifying the number of identical units in the 
  17799. processor.  If more than one unit is specified, they will be scheduled 
  17800. independently.  Only truly independent units should be counted; a pipelined 
  17801. unit should be specified as a single unit.  (The only common example of a 
  17802. machine that has multiple function units for a single instruction class that 
  17803. are truly independent and not pipelined are the two multiply and two increment 
  17804. units of the CDC 6600.) 
  17805.  
  17806. simultaneity specifies the maximum number of insns that can be executing in 
  17807. each instance of the function unit simultaneously or zero if the unit is 
  17808. pipelined and has no limit. 
  17809.  
  17810. All define_function_unit definitions referring to function unit name must have 
  17811. the same name and values for multiplicity and simultaneity. 
  17812.  
  17813. test is an attribute test that selects the insns we are describing in this 
  17814. definition.  Note that an insn may use more than one function unit and a 
  17815. function unit may be specified in more than one define_function_unit. 
  17816.  
  17817. ready-delay is an integer that specifies the number of cycles after which the 
  17818. result of the instruction can be used without introducing any stalls. 
  17819.  
  17820. issue-delay is an integer that specifies the number of cycles after the 
  17821. instruction matching the test expression begins using this unit until a 
  17822. subsequent instruction can begin.  A cost of N indicates an N-1 cycle delay.  A 
  17823. subsequent instruction may also be delayed if an earlier instruction has a 
  17824. longer ready-delay value.  This blocking effect is computed using the 
  17825. simultaneity, ready-delay, issue-delay, and conflict-list terms. For a normal 
  17826. non-pipelined function unit, simultaneity is one, the unit is taken to block 
  17827. for the ready-delay cycles of the executing insn, and smaller values of 
  17828. issue-delay are ignored. 
  17829.  
  17830. conflict-list is an optional list giving detailed conflict costs for this unit. 
  17831. If specified, it is a list of condition test expressions to be applied to insns 
  17832. chosen to execute in name following the particular insn matching test that is 
  17833. already executing in name.  For each insn in the list, issue-delay specifies 
  17834. the conflict cost; for insns not in the list, the cost is zero.  If not 
  17835. specified, conflict-list defaults to all instructions that use the function 
  17836. unit. 
  17837.  
  17838. Typical uses of this vector are where a floating point function unit can 
  17839. pipeline either single- or double-precision operations, but not both, or where 
  17840. a memory unit can pipeline loads, but not stores, etc. 
  17841.  
  17842. As an example, consider a classic RISC machine where the result of a load 
  17843. instruction is not available for two cycles (a single ``delay'' instruction is 
  17844. required) and where only one load instruction can be executed simultaneously. 
  17845. This would be specified as: 
  17846.  
  17847. (define_function_unit "memory" 1 1 (eq_attr "type" "load") 2 0)
  17848.  
  17849. For the case of a floating point function unit that can pipeline either single 
  17850. or double precision, but not both, the following could be specified: 
  17851.  
  17852. (define_function_unit
  17853.    "fp" 1 0 (eq_attr "type" "sp_fp") 4 4 [(eq_attr "type" "dp_fp")])
  17854. (define_function_unit
  17855.    "fp" 1 0 (eq_attr "type" "dp_fp") 4 4 [(eq_attr "type" "sp_fp")])
  17856.  
  17857. *Note:* The scheduler attempts to avoid function unit conflicts and uses all 
  17858. the specifications in the define_function_unit expression.  It has recently 
  17859. come to our attention that these specifications may not allow modeling of some 
  17860. of the newer ``superscalar'' processors that have insns using multiple 
  17861. pipelined units.  These insns will cause a potential conflict for the second 
  17862. unit used during their execution and there is no way of representing that 
  17863. conflict.  We welcome any examples of how function unit conflicts work in such 
  17864. processors and suggestions for their representation. 
  17865.  
  17866.  
  17867. ΓòÉΓòÉΓòÉ 21. Target Description Macros ΓòÉΓòÉΓòÉ
  17868.  
  17869. In addition to the file `machine.md', a machine description includes a C header 
  17870. file conventionally given the name `machine.h'.  This header file defines 
  17871. numerous macros that convey the information about the target machine that does 
  17872. not fit into the scheme of the `.md' file.  The file `tm.h' should be a link to 
  17873. `machine.h'.  The header file `config.h' includes `tm.h' and most compiler 
  17874. source files include `config.h'. 
  17875.  
  17876.  Driver                                  Controlling how the driver runs the 
  17877.                                          compilation passes. 
  17878.  Run-time Target                         Defining -m options like -m68000 and 
  17879.                                          -m68020. 
  17880.  Storage Layout                          Defining sizes and alignments of data. 
  17881.  Type Layout                             Defining sizes and properties of basic 
  17882.                                          user data types. 
  17883.  Registers                               Naming and describing the hardware 
  17884.                                          registers. 
  17885.  Register Classes                        Defining the classes of hardware 
  17886.                                          registers. 
  17887.  Stack and Calling                       Defining which way the stack grows and 
  17888.                                          by how much. 
  17889.  Varargs                                 Defining the varargs macros. 
  17890.  Trampolines                             Code set up at run time to enter a 
  17891.                                          nested function. 
  17892.  Library Calls                           Controlling how library routines are 
  17893.                                          implicitly called. 
  17894.  Addressing Modes                        Defining addressing modes valid for 
  17895.                                          memory operands. 
  17896.  Condition Code                          Defining how insns update the 
  17897.                                          condition code. 
  17898.  Costs                                   Defining relative costs of different 
  17899.                                          operations. 
  17900.  Sections                                Dividing storage into text, data, and 
  17901.                                          other sections. 
  17902.  PIC                                     Macros for position independent code. 
  17903.  Assembler Format                        Defining how to write insns and 
  17904.                                          pseudo-ops to output. 
  17905.  Debugging Info                          Defining the format of debugging 
  17906.                                          output. 
  17907.  Cross-compilation                       Handling floating point for 
  17908.                                          cross-compilers. 
  17909.  Misc                                    Everything else. 
  17910.  
  17911.  
  17912. ΓòÉΓòÉΓòÉ 21.1. Controlling the Compilation Driver, gcc ΓòÉΓòÉΓòÉ
  17913.  
  17914. You can control the compilation driver. 
  17915.  
  17916.  SWITCH_TAKES_ARG (char) 
  17917.            A C expression which determines whether the option `-char' takes 
  17918.            arguments.  The value should be the number of arguments that option 
  17919.            takes--zero, for many options. 
  17920.  
  17921.            By default, this macro is defined to handle the standard options 
  17922.            properly.  You need not define it unless you wish to add additional 
  17923.            options which take arguments. 
  17924.  
  17925.  WORD_SWITCH_TAKES_ARG (name) 
  17926.            A C expression which determines whether the option `-name' takes 
  17927.            arguments.  The value should be the number of arguments that option 
  17928.            takes--zero, for many options.  This macro rather than 
  17929.            SWITCH_TAKES_ARG is used for multi-character option names. 
  17930.  
  17931.            By default, this macro is defined as DEFAULT_WORD_SWITCH_TAKES_ARG, 
  17932.            which handles the standard options properly.  You need not define 
  17933.            WORD_SWITCH_TAKES_ARG unless you wish to add additional options 
  17934.            which take arguments.  Any redefinition should call 
  17935.            DEFAULT_WORD_SWITCH_TAKES_ARG and then check for additional options. 
  17936.  
  17937.  SWITCHES_NEED_SPACES 
  17938.            A string-valued C expression which is nonempty if the linker needs a 
  17939.            space between the `-L' or `-o' option and its argument. 
  17940.  
  17941.            If this macro is not defined, the default value is 0. 
  17942.  
  17943.  CPP_SPEC 
  17944.            A C string constant that tells the GNU CC driver program options to 
  17945.            pass to CPP.  It can also specify how to translate options you give 
  17946.            to GNU CC into options for GNU CC to pass to the CPP. 
  17947.  
  17948.            Do not define this macro if it does not need to do anything. 
  17949.  
  17950.  NO_BUILTIN_SIZE_TYPE 
  17951.            If this macro is defined, the preprocessor will not define the 
  17952.            builtin macro __SIZE_TYPE__.  The macro __SIZE_TYPE__ must then be 
  17953.            defined by CPP_SPEC instead. 
  17954.  
  17955.            This should be defined if SIZE_TYPE depends on target dependent 
  17956.            flags which are not accessible to the preprocessor.  Otherwise, it 
  17957.            should not be defined. 
  17958.  
  17959.  NO_BUILTIN_PTRDIFF_TYPE 
  17960.            If this macro is defined, the preprocessor will not define the 
  17961.            builtin macro __PTRDIFF_TYPE__.  The macro __PTRDIFF_TYPE__ must 
  17962.            then be defined by CPP_SPEC instead. 
  17963.  
  17964.            This should be defined if PTRDIFF_TYPE depends on target dependent 
  17965.            flags which are not accessible to the preprocessor.  Otherwise, it 
  17966.            should not be defined. 
  17967.  
  17968.  SIGNED_CHAR_SPEC 
  17969.            A C string constant that tells the GNU CC driver program options to 
  17970.            pass to CPP.  By default, this macro is defined to pass the option 
  17971.            `-D__CHAR_UNSIGNED__' to CPP if char will be treated as unsigned 
  17972.            char by cc1. 
  17973.  
  17974.            Do not define this macro unless you need to override the default 
  17975.            definition. 
  17976.  
  17977.  CC1_SPEC 
  17978.            A C string constant that tells the GNU CC driver program options to 
  17979.            pass to cc1.  It can also specify how to translate options you give 
  17980.            to GNU CC into options for GNU CC to pass to the cc1. 
  17981.  
  17982.            Do not define this macro if it does not need to do anything. 
  17983.  
  17984.  CC1PLUS_SPEC 
  17985.            A C string constant that tells the GNU CC driver program options to 
  17986.            pass to cc1plus.  It can also specify how to translate options you 
  17987.            give to GNU CC into options for GNU CC to pass to the cc1plus. 
  17988.  
  17989.            Do not define this macro if it does not need to do anything. 
  17990.  
  17991.  ASM_SPEC 
  17992.            A C string constant that tells the GNU CC driver program options to 
  17993.            pass to the assembler.  It can also specify how to translate options 
  17994.            you give to GNU CC into options for GNU CC to pass to the assembler. 
  17995.            See the file `sun3.h' for an example of this. 
  17996.  
  17997.            Do not define this macro if it does not need to do anything. 
  17998.  
  17999.  ASM_FINAL_SPEC 
  18000.            A C string constant that tells the GNU CC driver program how to run 
  18001.            any programs which cleanup after the normal assembler. Normally, 
  18002.            this is not needed.  See the file `mips.h' for an example of this. 
  18003.  
  18004.            Do not define this macro if it does not need to do anything. 
  18005.  
  18006.  LINK_SPEC 
  18007.            A C string constant that tells the GNU CC driver program options to 
  18008.            pass to the linker.  It can also specify how to translate options 
  18009.            you give to GNU CC into options for GNU CC to pass to the linker. 
  18010.  
  18011.            Do not define this macro if it does not need to do anything. 
  18012.  
  18013.  LIB_SPEC 
  18014.            Another C string constant used much like LINK_SPEC.  The difference 
  18015.            between the two is that LIB_SPEC is used at the end of the command 
  18016.            given to the linker. 
  18017.  
  18018.            If this macro is not defined, a default is provided that loads the 
  18019.            standard C library from the usual place.  See `gcc.c'. 
  18020.  
  18021.  LIBGCC_SPEC 
  18022.            Another C string constant that tells the GNU CC driver program how 
  18023.            and when to place a reference to `libgcc.a' into the linker command 
  18024.            line.  This constant is placed both before and after the value of 
  18025.            LIB_SPEC. 
  18026.  
  18027.            If this macro is not defined, the GNU CC driver provides a default 
  18028.            that passes the string `-lgcc' to the linker unless the `-shared' 
  18029.            option is specified. 
  18030.  
  18031.  STARTFILE_SPEC 
  18032.            Another C string constant used much like LINK_SPEC.  The difference 
  18033.            between the two is that STARTFILE_SPEC is used at the very beginning 
  18034.            of the command given to the linker. 
  18035.  
  18036.            If this macro is not defined, a default is provided that loads the 
  18037.            standard C startup file from the usual place.  See `gcc.c'. 
  18038.  
  18039.  ENDFILE_SPEC 
  18040.            Another C string constant used much like LINK_SPEC.  The difference 
  18041.            between the two is that ENDFILE_SPEC is used at the very end of the 
  18042.            command given to the linker. 
  18043.  
  18044.            Do not define this macro if it does not need to do anything. 
  18045.  
  18046.  LINK_LIBGCC_SPECIAL 
  18047.            Define this macro if the driver program should find the library 
  18048.            `libgcc.a' itself and should not pass `-L' options to the linker. 
  18049.            If you do not define this macro, the driver program will pass the 
  18050.            argument `-lgcc' to tell the linker to do the search and will pass 
  18051.            `-L' options to it. 
  18052.  
  18053.  LINK_LIBGCC_SPECIAL_1 
  18054.            Define this macro if the driver program should find the library 
  18055.            `libgcc.a'.  If you do not define this macro, the driver program 
  18056.            will pass the argument `-lgcc' to tell the linker to do the search. 
  18057.            This macro is similar to LINK_LIBGCC_SPECIAL, except that it does 
  18058.            not affect `-L' options. 
  18059.  
  18060.  MULTILIB_DEFAULTS 
  18061.            Define this macro as a C expression for the initializer of an array 
  18062.            of string to tell the driver program which options are defaults for 
  18063.            this target and thus do not need to be handled specially when using 
  18064.            MULTILIB_OPTIONS. 
  18065.  
  18066.            Do not define this macro if MULTILIB_OPTIONS is not defined in the 
  18067.            target makefile fragment or if none of the options listed in 
  18068.            MULTILIB_OPTIONS are set by default. See Target Fragment. 
  18069.  
  18070.  RELATIVE_PREFIX_NOT_LINKDIR 
  18071.            Define this macro to tell gcc that it should only translate a `-B' 
  18072.            prefix into a `-L' linker option if the prefix indicates an absolute 
  18073.            file name. 
  18074.  
  18075.  STANDARD_EXEC_PREFIX 
  18076.            Define this macro as a C string constant if you wish to override the 
  18077.            standard choice of `/usr/local/lib/gcc-lib/' as the default prefix 
  18078.            to try when searching for the executable files of the compiler. 
  18079.  
  18080.  MD_EXEC_PREFIX 
  18081.            If defined, this macro is an additional prefix to try after 
  18082.            STANDARD_EXEC_PREFIX.  MD_EXEC_PREFIX is not searched when the `-b' 
  18083.            option is used, or the compiler is built as a cross compiler. 
  18084.  
  18085.  STANDARD_STARTFILE_PREFIX 
  18086.            Define this macro as a C string constant if you wish to override the 
  18087.            standard choice of `/usr/local/lib/' as the default prefix to try 
  18088.            when searching for startup files such as `crt0.o'. 
  18089.  
  18090.  MD_STARTFILE_PREFIX 
  18091.            If defined, this macro supplies an additional prefix to try after 
  18092.            the standard prefixes.  MD_EXEC_PREFIX is not searched when the `-b' 
  18093.            option is used, or when the compiler is built as a cross compiler. 
  18094.  
  18095.  MD_STARTFILE_PREFIX_1 
  18096.            If defined, this macro supplies yet another prefix to try after the 
  18097.            standard prefixes.  It is not searched when the `-b' option is used, 
  18098.            or when the compiler is built as a cross compiler. 
  18099.  
  18100.  INIT_ENVIRONMENT 
  18101.            Define this macro as a C string constant if you with to set 
  18102.            environment variables for programs called by the driver, such as the 
  18103.            assembler and loader.  The driver passes the value of this macro to 
  18104.            putenv to initialize the necessary environment variables. 
  18105.  
  18106.  LOCAL_INCLUDE_DIR 
  18107.            Define this macro as a C string constant if you wish to override the 
  18108.            standard choice of `/usr/local/include' as the default prefix to try 
  18109.            when searching for local header files.  LOCAL_INCLUDE_DIR comes 
  18110.            before SYSTEM_INCLUDE_DIR in the search order. 
  18111.  
  18112.            Cross compilers do not use this macro and do not search either 
  18113.            `/usr/local/include' or its replacement. 
  18114.  
  18115.  SYSTEM_INCLUDE_DIR 
  18116.            Define this macro as a C string constant if you wish to specify a 
  18117.            system-specific directory to search for header files before the 
  18118.            standard directory.  SYSTEM_INCLUDE_DIR comes before 
  18119.            STANDARD_INCLUDE_DIR in the search order. 
  18120.  
  18121.            Cross compilers do not use this macro and do not search the 
  18122.            directory specified. 
  18123.  
  18124.  STANDARD_INCLUDE_DIR 
  18125.            Define this macro as a C string constant if you wish to override the 
  18126.            standard choice of `/usr/include' as the default prefix to try when 
  18127.            searching for header files. 
  18128.  
  18129.            Cross compilers do not use this macro and do not search either 
  18130.            `/usr/include' or its replacement. 
  18131.  
  18132.  INCLUDE_DEFAULTS 
  18133.            Define this macro if you wish to override the entire default search 
  18134.            path for include files.  The default search path includes 
  18135.            GCC_INCLUDE_DIR, LOCAL_INCLUDE_DIR, SYSTEM_INCLUDE_DIR, 
  18136.            GPLUSPLUS_INCLUDE_DIR, and STANDARD_INCLUDE_DIR.  In addition, 
  18137.            GPLUSPLUS_INCLUDE_DIR and GCC_INCLUDE_DIR are defined automatically 
  18138.            by `Makefile', and specify private search areas for GCC.  The 
  18139.            directory GPLUSPLUS_INCLUDE_DIR is used only for C++ programs. 
  18140.  
  18141.            The definition should be an initializer for an array of structures. 
  18142.            Each array element should have two elements: the directory name (a 
  18143.            string constant) and a flag for C++-only directories.  Mark the end 
  18144.            of the array with a null element.  For example, here is the 
  18145.            definition used for VMS: 
  18146.  
  18147.                       #define INCLUDE_DEFAULTS \
  18148.                       {                                       \
  18149.                         { "GNU_GXX_INCLUDE:", 1},             \
  18150.                         { "GNU_CC_INCLUDE:", 0},              \
  18151.                         { "SYS$SYSROOT:[SYSLIB.]", 0},        \
  18152.                         { ".", 0},                            \
  18153.                         { 0, 0}                               \
  18154.                       }
  18155.  
  18156.  Here is the order of prefixes tried for exec files: 
  18157.  
  18158.    1. Any prefixes specified by the user with `-B'. 
  18159.  
  18160.    2. The environment variable GCC_EXEC_PREFIX, if any. 
  18161.  
  18162.    3. The directories specified by the environment variable COMPILER_PATH. 
  18163.  
  18164.    4. The macro STANDARD_EXEC_PREFIX. 
  18165.  
  18166.    5. `/usr/lib/gcc/'. 
  18167.  
  18168.    6. The macro MD_EXEC_PREFIX, if any. 
  18169.  
  18170.  Here is the order of prefixes tried for startfiles: 
  18171.  
  18172.    1. Any prefixes specified by the user with `-B'. 
  18173.  
  18174.    2. The environment variable GCC_EXEC_PREFIX, if any. 
  18175.  
  18176.    3. The directories specified by the environment variable LIBRARY_PATH 
  18177.       (native only, cross compilers do not use this). 
  18178.  
  18179.    4. The macro STANDARD_EXEC_PREFIX. 
  18180.  
  18181.    5. `/usr/lib/gcc/'. 
  18182.  
  18183.    6. The macro MD_EXEC_PREFIX, if any. 
  18184.  
  18185.    7. The macro MD_STARTFILE_PREFIX, if any. 
  18186.  
  18187.    8. The macro STANDARD_STARTFILE_PREFIX. 
  18188.  
  18189.    9. `/lib/'. 
  18190.  
  18191.   10. `/usr/lib/'. 
  18192.  
  18193.  
  18194. ΓòÉΓòÉΓòÉ 21.2. Run-time Target Specification ΓòÉΓòÉΓòÉ
  18195.  
  18196. Here are run-time target specifications. 
  18197.  
  18198.  CPP_PREDEFINES 
  18199.            Define this to be a string constant containing `-D' options to 
  18200.            define the predefined macros that identify this machine and system. 
  18201.            These macros will be predefined unless the `-ansi' option is 
  18202.            specified. 
  18203.  
  18204.            In addition, a parallel set of macros are predefined, whose names 
  18205.            are made by appending `__' at the beginning and at the end.  These 
  18206.            `__' macros are permitted by the ANSI standard, so they are 
  18207.            predefined regardless of whether `-ansi' is specified. 
  18208.  
  18209.            For example, on the Sun, one can use the following value: 
  18210.  
  18211.                       "-Dmc68000 -Dsun -Dunix"
  18212.  
  18213.            The result is to define the macros __mc68000__, __sun__ and __unix__ 
  18214.            unconditionally, and the macros mc68000, sun and unix provided 
  18215.            `-ansi' is not specified. 
  18216.  
  18217.  extern int target_flags; 
  18218.            This declaration should be present. 
  18219.  
  18220.  TARGET_... 
  18221.            This series of macros is to allow compiler command arguments to 
  18222.            enable or disable the use of optional features of the target 
  18223.            machine. For example, one machine description serves both the 68000 
  18224.            and the 68020; a command argument tells the compiler whether it 
  18225.            should use 68020-only instructions or not.  This command argument 
  18226.            works by means of a macro TARGET_68020 that tests a bit in 
  18227.            target_flags. 
  18228.  
  18229.            Define a macro TARGET_featurename for each such option. Its 
  18230.            definition should test a bit in target_flags; for example: 
  18231.  
  18232.                       #define TARGET_68020 (target_flags & 1)
  18233.  
  18234.            One place where these macros are used is in the 
  18235.            condition-expressions of instruction patterns.  Note how 
  18236.            TARGET_68020 appears frequently in the 68000 machine description 
  18237.            file, `m68k.md'. Another place they are used is in the definitions 
  18238.            of the other macros in the `machine.h' file. 
  18239.  
  18240.  TARGET_SWITCHES 
  18241.            This macro defines names of command options to set and clear bits in 
  18242.            target_flags.  Its definition is an initializer with a subgrouping 
  18243.            for each command option. 
  18244.  
  18245.            Each subgrouping contains a string constant, that defines the option 
  18246.            name, and a number, which contains the bits to set in target_flags. 
  18247.            A negative number says to clear bits instead; the negative of the 
  18248.            number is which bits to clear.  The actual option name is made by 
  18249.            appending `-m' to the specified name. 
  18250.  
  18251.            One of the subgroupings should have a null string.  The number in 
  18252.            this grouping is the default value for target_flags.  Any target 
  18253.            options act starting with that value. 
  18254.  
  18255.            Here is an example which defines `-m68000' and `-m68020' with 
  18256.            opposite meanings, and picks the latter as the default: 
  18257.  
  18258.                       #define TARGET_SWITCHES \
  18259.                         { { "68020", 1},      \
  18260.                           { "68000", -1},     \
  18261.                           { "", 1}}
  18262.  
  18263.  TARGET_OPTIONS 
  18264.            This macro is similar to TARGET_SWITCHES but defines names of 
  18265.            command options that have values.  Its definition is an initializer 
  18266.            with a subgrouping for each command option. 
  18267.  
  18268.            Each subgrouping contains a string constant, that defines the fixed 
  18269.            part of the option name, and the address of a variable.  The 
  18270.            variable, type char *, is set to the variable part of the given 
  18271.            option if the fixed part matches.  The actual option name is made by 
  18272.            appending `-m' to the specified name. 
  18273.  
  18274.            Here is an example which defines `-mshort-data-number'.  If the 
  18275.            given option is `-mshort-data-512', the variable m88k_short_data 
  18276.            will be set to the string "512". 
  18277.  
  18278.                       extern char *m88k_short_data;
  18279.                       #define TARGET_OPTIONS \
  18280.                        { { "short-data-", &m88k_short_data } }
  18281.  
  18282.  TARGET_VERSION 
  18283.            This macro is a C statement to print on stderr a string describing 
  18284.            the particular machine description choice.  Every machine 
  18285.            description should define TARGET_VERSION.  For example: 
  18286.  
  18287.                       #ifdef MOTOROLA
  18288.                       #define TARGET_VERSION \
  18289.                         fprintf (stderr, " (68k, Motorola syntax)");
  18290.                       #else
  18291.                       #define TARGET_VERSION \
  18292.                         fprintf (stderr, " (68k, MIT syntax)");
  18293.                       #endif
  18294.  
  18295.  OVERRIDE_OPTIONS 
  18296.            Sometimes certain combinations of command options do not make sense 
  18297.            on a particular target machine.  You can define a macro 
  18298.            OVERRIDE_OPTIONS to take account of this.  This macro, if defined, 
  18299.            is executed once just after all the command options have been 
  18300.            parsed. 
  18301.  
  18302.            Don't use this macro to turn on various extra optimizations for 
  18303.            `-O'.  That is what OPTIMIZATION_OPTIONS is for. 
  18304.  
  18305.  OPTIMIZATION_OPTIONS (level) 
  18306.            Some machines may desire to change what optimizations are performed 
  18307.            for various optimization levels.  This macro, if defined, is 
  18308.            executed once just after the optimization level is determined and 
  18309.            before the remainder of the command options have been parsed. 
  18310.            Values set in this macro are used as the default values for the 
  18311.            other command line options. 
  18312.  
  18313.            level is the optimization level specified; 2 if `-O2' is specified, 
  18314.            1 if `-O' is specified, and 0 if neither is specified. 
  18315.  
  18316.            You should not use this macro to change options that are not 
  18317.            machine-specific.  These should uniformly selected by the same 
  18318.            optimization level on all supported machines.  Use this macro to 
  18319.            enable machbine-specific optimizations. 
  18320.  
  18321.            *Do not examine write_symbols in this macro!* The debugging options 
  18322.            are not supposed to alter the generated code. 
  18323.  
  18324.  CAN_DEBUG_WITHOUT_FP 
  18325.            Define this macro if debugging can be performed even without a frame 
  18326.            pointer.  If this macro is defined, GNU CC will turn on the 
  18327.            `-fomit-frame-pointer' option whenever `-O' is specified. 
  18328.  
  18329.  
  18330. ΓòÉΓòÉΓòÉ 21.3. Storage Layout ΓòÉΓòÉΓòÉ
  18331.  
  18332. Note that the definitions of the macros in this table which are sizes or 
  18333. alignments measured in bits do not need to be constant.  They can be C 
  18334. expressions that refer to static variables, such as the target_flags. See 
  18335. Run-time Target. 
  18336.  
  18337.  BITS_BIG_ENDIAN 
  18338.            Define this macro to have the value 1 if the most significant bit in 
  18339.            a byte has the lowest number; otherwise define it to have the value 
  18340.            zero. This means that bit-field instructions count from the most 
  18341.            significant bit.  If the machine has no bit-field instructions, then 
  18342.            this must still be defined, but it doesn't matter which value it is 
  18343.            defined to.  This macro need not be a constant. 
  18344.  
  18345.            This macro does not affect the way structure fields are packed into 
  18346.            bytes or words; that is controlled by BYTES_BIG_ENDIAN. 
  18347.  
  18348.  BYTES_BIG_ENDIAN 
  18349.            Define this macro to have the value 1 if the most significant byte 
  18350.            in a word has the lowest number.  This macro need not be a constant. 
  18351.  
  18352.  WORDS_BIG_ENDIAN 
  18353.            Define this macro to have the value 1 if, in a multiword object, the 
  18354.            most significant word has the lowest number.  This applies to both 
  18355.            memory locations and registers; GNU CC fundamentally assumes that 
  18356.            the order of words in memory is the same as the order in registers. 
  18357.            This macro need not be a constant. 
  18358.  
  18359.  LIBGCC2_WORDS_BIG_ENDIAN 
  18360.            Define this macro if WORDS_BIG_ENDIAN is not constant.  This must be 
  18361.            a constant value with the same meaning as WORDS_BIG_ENDIAN, which 
  18362.            will be used only when compiling libgcc2.c.  Typically the value 
  18363.            will be set based on preprocessor defines. 
  18364.  
  18365.  FLOAT_WORDS_BIG_ENDIAN 
  18366.            Define this macro to have the value 1 if DFmode, XFmode or TFmode 
  18367.            floating point numbers are stored in memory with the word containing 
  18368.            the sign bit at the lowest address; otherwise define it to have the 
  18369.            value 0.  This macro need not be a constant. 
  18370.  
  18371.            You need not define this macro if the ordering is the same as for 
  18372.            multi-word integers. 
  18373.  
  18374.  BITS_PER_UNIT 
  18375.            Define this macro to be the number of bits in an addressable storage 
  18376.            unit (byte); normally 8. 
  18377.  
  18378.  BITS_PER_WORD 
  18379.            Number of bits in a word; normally 32. 
  18380.  
  18381.  MAX_BITS_PER_WORD 
  18382.            Maximum number of bits in a word.  If this is undefined, the default 
  18383.            is BITS_PER_WORD.  Otherwise, it is the constant value that is the 
  18384.            largest value that BITS_PER_WORD can have at run-time. 
  18385.  
  18386.  UNITS_PER_WORD 
  18387.            Number of storage units in a word; normally 4. 
  18388.  
  18389.  MIN_UNITS_PER_WORD 
  18390.            Minimum number of units in a word.  If this is undefined, the 
  18391.            default is UNITS_PER_WORD.  Otherwise, it is the constant value that 
  18392.            is the smallest value that UNITS_PER_WORD can have at run-time. 
  18393.  
  18394.  POINTER_SIZE 
  18395.            Width of a pointer, in bits.  You must specify a value no wider than 
  18396.            the width of Pmode.  If it is not equal to the width of Pmode, you 
  18397.            must define POINTERS_EXTEND_UNSIGNED. 
  18398.  
  18399.  POINTERS_EXTEND_UNSIGNED 
  18400.            A C expression whose value is nonzero if pointers that need to be 
  18401.            extended from being POINTER_SIZE bits wide to Pmode are 
  18402.            sign-extended and zero if they are zero-extended. 
  18403.  
  18404.            You need not define this macro if the POINTER_SIZE is equal to the 
  18405.            width of Pmode. 
  18406.  
  18407.  PROMOTE_MODE (m, unsignedp, type) 
  18408.            A macro to update m and unsignedp when an object whose type is type 
  18409.            and which has the specified mode and signedness is to be stored in a 
  18410.            register.  This macro is only called when type is a scalar type. 
  18411.  
  18412.            On most RISC machines, which only have operations that operate on a 
  18413.            full register, define this macro to set m to word_mode if m is an 
  18414.            integer mode narrower than BITS_PER_WORD.  In most cases, only 
  18415.            integer modes should be widened because wider-precision 
  18416.            floating-point operations are usually more expensive than their 
  18417.            narrower counterparts. 
  18418.  
  18419.            For most machines, the macro definition does not change unsignedp. 
  18420.            However, some machines, have instructions that preferentially handle 
  18421.            either signed or unsigned quantities of certain modes.  For example, 
  18422.            on the DEC Alpha, 32-bit loads from memory and 32-bit add 
  18423.            instructions sign-extend the result to 64 bits.  On such machines, 
  18424.            set unsignedp according to which kind of extension is more 
  18425.            efficient. 
  18426.  
  18427.            Do not define this macro if it would never modify m. 
  18428.  
  18429.  PROMOTE_FUNCTION_ARGS 
  18430.            Define this macro if the promotion described by PROMOTE_MODE should 
  18431.            also be done for outgoing function arguments. 
  18432.  
  18433.  PROMOTE_FUNCTION_RETURN 
  18434.            Define this macro if the promotion described by PROMOTE_MODE should 
  18435.            also be done for the return value of functions. 
  18436.  
  18437.            If this macro is defined, FUNCTION_VALUE must perform the same 
  18438.            promotions done by PROMOTE_MODE. 
  18439.  
  18440.  PROMOTE_FOR_CALL_ONLY 
  18441.            Define this macro if the promotion described by PROMOTE_MODE should 
  18442.            only be performed for outgoing function arguments or function return 
  18443.            values, as specified by PROMOTE_FUNCTION_ARGS and 
  18444.            PROMOTE_FUNCTION_RETURN, respectively. 
  18445.  
  18446.  PARM_BOUNDARY 
  18447.            Normal alignment required for function parameters on the stack, in 
  18448.            bits.  All stack parameters receive at least this much alignment 
  18449.            regardless of data type.  On most machines, this is the same as the 
  18450.            size of an integer. 
  18451.  
  18452.  STACK_BOUNDARY 
  18453.            Define this macro if you wish to preserve a certain alignment for 
  18454.            the stack pointer.  The definition is a C expression for the desired 
  18455.            alignment (measured in bits). 
  18456.  
  18457.            If PUSH_ROUNDING is not defined, the stack will always be aligned to 
  18458.            the specified boundary.  If PUSH_ROUNDING is defined and specifies a 
  18459.            less strict alignment than STACK_BOUNDARY, the stack may be 
  18460.            momentarily unaligned while pushing arguments. 
  18461.  
  18462.  FUNCTION_BOUNDARY 
  18463.            Alignment required for a function entry point, in bits. 
  18464.  
  18465.  BIGGEST_ALIGNMENT 
  18466.            Biggest alignment that any data type can require on this machine, in 
  18467.            bits. 
  18468.  
  18469.  BIGGEST_FIELD_ALIGNMENT 
  18470.            Biggest alignment that any structure field can require on this 
  18471.            machine, in bits.  If defined, this overrides BIGGEST_ALIGNMENT for 
  18472.            structure fields only. 
  18473.  
  18474.  MAX_OFILE_ALIGNMENT 
  18475.            Biggest alignment supported by the object file format of this 
  18476.            machine. Use this macro to limit the alignment which can be 
  18477.            specified using the __attribute__ ((aligned (n))) construct.  If not 
  18478.            defined, the default value is BIGGEST_ALIGNMENT. 
  18479.  
  18480.  DATA_ALIGNMENT (type, basic-align) 
  18481.            If defined, a C expression to compute the alignment for a static 
  18482.            variable.  type is the data type, and basic-align is the alignment 
  18483.            that the object would ordinarily have.  The value of this macro is 
  18484.            used instead of that alignment to align the object. 
  18485.  
  18486.            If this macro is not defined, then basic-align is used. 
  18487.  
  18488.            One use of this macro is to increase alignment of medium-size data 
  18489.            to make it all fit in fewer cache lines.  Another is to cause 
  18490.            character arrays to be word-aligned so that strcpy calls that copy 
  18491.            constants to character arrays can be done inline. 
  18492.  
  18493.  CONSTANT_ALIGNMENT (constant, basic-align) 
  18494.            If defined, a C expression to compute the alignment given to a 
  18495.            constant that is being placed in memory.  constant is the constant 
  18496.            and basic-align is the alignment that the object would ordinarily 
  18497.            have.  The value of this macro is used instead of that alignment to 
  18498.            align the object. 
  18499.  
  18500.            If this macro is not defined, then basic-align is used. 
  18501.  
  18502.            The typical use of this macro is to increase alignment for string 
  18503.            constants to be word aligned so that strcpy calls that copy 
  18504.            constants can be done inline. 
  18505.  
  18506.  EMPTY_FIELD_BOUNDARY 
  18507.            Alignment in bits to be given to a structure bit field that follows 
  18508.            an empty field such as int : 0;. 
  18509.  
  18510.            Note that PCC_BITFIELD_TYPE_MATTERS also affects the alignment that 
  18511.            results from an empty field. 
  18512.  
  18513.  STRUCTURE_SIZE_BOUNDARY 
  18514.            Number of bits which any structure or union's size must be a 
  18515.            multiple of. Each structure or union's size is rounded up to a 
  18516.            multiple of this. 
  18517.  
  18518.            If you do not define this macro, the default is the same as 
  18519.            BITS_PER_UNIT. 
  18520.  
  18521.  STRICT_ALIGNMENT 
  18522.            Define this macro to be the value 1 if instructions will fail to 
  18523.            work if given data not on the nominal alignment.  If instructions 
  18524.            will merely go slower in that case, define this macro as 0. 
  18525.  
  18526.  PCC_BITFIELD_TYPE_MATTERS 
  18527.            Define this if you wish to imitate the way many other C compilers 
  18528.            handle alignment of bitfields and the structures that contain them. 
  18529.  
  18530.            The behavior is that the type written for a bitfield (int, short, or 
  18531.            other integer type) imposes an alignment for the entire structure, 
  18532.            as if the structure really did contain an ordinary field of that 
  18533.            type.  In addition, the bitfield is placed within the structure so 
  18534.            that it would fit within such a field, not crossing a boundary for 
  18535.            it. 
  18536.  
  18537.            Thus, on most machines, a bitfield whose type is written as int 
  18538.            would not cross a four-byte boundary, and would force four-byte 
  18539.            alignment for the whole structure.  (The alignment used may not be 
  18540.            four bytes; it is controlled by the other alignment parameters.) 
  18541.  
  18542.            If the macro is defined, its definition should be a C expression; a 
  18543.            nonzero value for the expression enables this behavior. 
  18544.  
  18545.            Note that if this macro is not defined, or its value is zero, some 
  18546.            bitfields may cross more than one alignment boundary.  The compiler 
  18547.            can support such references if there are `insv', `extv', and `extzv' 
  18548.            insns that can directly reference memory. 
  18549.  
  18550.            The other known way of making bitfields work is to define 
  18551.            STRUCTURE_SIZE_BOUNDARY as large as BIGGEST_ALIGNMENT. Then every 
  18552.            structure can be accessed with fullwords. 
  18553.  
  18554.            Unless the machine has bitfield instructions or you define 
  18555.            STRUCTURE_SIZE_BOUNDARY that way, you must define 
  18556.            PCC_BITFIELD_TYPE_MATTERS to have a nonzero value. 
  18557.  
  18558.            If your aim is to make GNU CC use the same conventions for laying 
  18559.            out bitfields as are used by another compiler, here is how to 
  18560.            investigate what the other compiler does.  Compile and run this 
  18561.            program: 
  18562.  
  18563.                       struct foo1
  18564.                       {
  18565.                         char x;
  18566.                         char :0;
  18567.                         char y;
  18568.                       };
  18569.  
  18570.                       struct foo2
  18571.                       {
  18572.                         char x;
  18573.                         int :0;
  18574.                         char y;
  18575.                       };
  18576.  
  18577.                       main ()
  18578.                       {
  18579.                         printf ("Size of foo1 is %d\n",
  18580.                                 sizeof (struct foo1));
  18581.                         printf ("Size of foo2 is %d\n",
  18582.                                 sizeof (struct foo2));
  18583.                         exit (0);
  18584.                       }
  18585.  
  18586.            If this prints 2 and 5, then the compiler's behavior is what you 
  18587.            would get from PCC_BITFIELD_TYPE_MATTERS. 
  18588.  
  18589.  BITFIELD_NBYTES_LIMITED 
  18590.            Like PCC_BITFIELD_TYPE_MATTERS except that its effect is limited to 
  18591.            aligning a bitfield within the structure. 
  18592.  
  18593.  ROUND_TYPE_SIZE (struct, size, align) 
  18594.            Define this macro as an expression for the overall size of a 
  18595.            structure (given by struct as a tree node) when the size computed 
  18596.            from the fields is size and the alignment is align. 
  18597.  
  18598.            The default is to round size up to a multiple of align. 
  18599.  
  18600.  ROUND_TYPE_ALIGN (struct, computed, specified) 
  18601.            Define this macro as an expression for the alignment of a structure 
  18602.            (given by struct as a tree node) if the alignment computed in the 
  18603.            usual way is computed and the alignment explicitly specified was 
  18604.            specified. 
  18605.  
  18606.            The default is to use specified if it is larger; otherwise, use the 
  18607.            smaller of computed and BIGGEST_ALIGNMENT 
  18608.  
  18609.  MAX_FIXED_MODE_SIZE 
  18610.            An integer expression for the size in bits of the largest integer 
  18611.            machine mode that should actually be used.  All integer machine 
  18612.            modes of this size or smaller can be used for structures and unions 
  18613.            with the appropriate sizes.  If this macro is undefined, 
  18614.            GET_MODE_BITSIZE (DImode) is assumed. 
  18615.  
  18616.  CHECK_FLOAT_VALUE (mode, value, overflow) 
  18617.            A C statement to validate the value value (of type double) for mode 
  18618.            mode.  This means that you check whether value fits within the 
  18619.            possible range of values for mode mode on this target machine.  The 
  18620.            mode mode is always a mode of class MODE_FLOAT.  overflow is nonzero 
  18621.            if the value is already known to be out of range. 
  18622.  
  18623.            If value is not valid or if overflow is nonzero, you should set 
  18624.            overflow to 1 and then assign some valid value to value. Allowing an 
  18625.            invalid value to go through the compiler can produce incorrect 
  18626.            assembler code which may even cause Unix assemblers to crash. 
  18627.  
  18628.            This macro need not be defined if there is no work for it to do. 
  18629.  
  18630.  TARGET_FLOAT_FORMAT 
  18631.            A code distinguishing the floating point format of the target 
  18632.            machine. There are three defined values: 
  18633.  
  18634.            IEEE_FLOAT_FORMAT 
  18635.                           This code indicates IEEE floating point.  It is the 
  18636.                           default; there is no need to define this macro when 
  18637.                           the format is IEEE. 
  18638.  
  18639.            VAX_FLOAT_FORMAT 
  18640.                           This code indicates the peculiar format used on the 
  18641.                           Vax. 
  18642.  
  18643.            UNKNOWN_FLOAT_FORMAT 
  18644.                           This code indicates any other format. 
  18645.  
  18646.            The value of this macro is compared with HOST_FLOAT_FORMAT (see 
  18647.            Config) to determine whether the target machine has the same format 
  18648.            as the host machine.  If any other formats are actually in use on 
  18649.            supported machines, new codes should be defined for them. 
  18650.  
  18651.            The ordering of the component words of floating point values stored 
  18652.            in memory is controlled by FLOAT_WORDS_BIG_ENDIAN for the target 
  18653.            machine and HOST_FLOAT_WORDS_BIG_ENDIAN for the host. 
  18654.  
  18655.  
  18656. ΓòÉΓòÉΓòÉ 21.4. Layout of Source Language Data Types ΓòÉΓòÉΓòÉ
  18657.  
  18658. These macros define the sizes and other characteristics of the standard basic 
  18659. data types used in programs being compiled.  Unlike the macros in the previous 
  18660. section, these apply to specific features of C and related languages, rather 
  18661. than to fundamental aspects of storage layout. 
  18662.  
  18663.  INT_TYPE_SIZE 
  18664.            A C expression for the size in bits of the type int on the target 
  18665.            machine.  If you don't define this, the default is one word. 
  18666.  
  18667.  MAX_INT_TYPE_SIZE 
  18668.            Maximum number for the size in bits of the type int on the target 
  18669.            machine.  If this is undefined, the default is INT_TYPE_SIZE. 
  18670.            Otherwise, it is the constant value that is the largest value that 
  18671.            INT_TYPE_SIZE can have at run-time.  This is used in cpp. 
  18672.  
  18673.  SHORT_TYPE_SIZE 
  18674.            A C expression for the size in bits of the type short on the target 
  18675.            machine.  If you don't define this, the default is half a word. (If 
  18676.            this would be less than one storage unit, it is rounded up to one 
  18677.            unit.) 
  18678.  
  18679.  LONG_TYPE_SIZE 
  18680.            A C expression for the size in bits of the type long on the target 
  18681.            machine.  If you don't define this, the default is one word. 
  18682.  
  18683.  MAX_LONG_TYPE_SIZE 
  18684.            Maximum number for the size in bits of the type long on the target 
  18685.            machine.  If this is undefined, the default is LONG_TYPE_SIZE. 
  18686.            Otherwise, it is the constant value that is the largest value that 
  18687.            LONG_TYPE_SIZE can have at run-time.  This is used in cpp. 
  18688.  
  18689.  LONG_LONG_TYPE_SIZE 
  18690.            A C expression for the size in bits of the type long long on the 
  18691.            target machine.  If you don't define this, the default is two words. 
  18692.            If you want to support GNU Ada on your machine, the value of macro 
  18693.            must be at least 64. 
  18694.  
  18695.  CHAR_TYPE_SIZE 
  18696.            A C expression for the size in bits of the type char on the target 
  18697.            machine.  If you don't define this, the default is one quarter of a 
  18698.            word.  (If this would be less than one storage unit, it is rounded 
  18699.            up to one unit.) 
  18700.  
  18701.  MAX_CHAR_TYPE_SIZE 
  18702.            Maximum number for the size in bits of the type char on the target 
  18703.            machine.  If this is undefined, the default is CHAR_TYPE_SIZE. 
  18704.            Otherwise, it is the constant value that is the largest value that 
  18705.            CHAR_TYPE_SIZE can have at run-time.  This is used in cpp. 
  18706.  
  18707.  FLOAT_TYPE_SIZE 
  18708.            A C expression for the size in bits of the type float on the target 
  18709.            machine.  If you don't define this, the default is one word. 
  18710.  
  18711.  DOUBLE_TYPE_SIZE 
  18712.            A C expression for the size in bits of the type double on the target 
  18713.            machine.  If you don't define this, the default is two words. 
  18714.  
  18715.  LONG_DOUBLE_TYPE_SIZE 
  18716.            A C expression for the size in bits of the type long double on the 
  18717.            target machine.  If you don't define this, the default is two words. 
  18718.  
  18719.  DEFAULT_SIGNED_CHAR 
  18720.            An expression whose value is 1 or 0, according to whether the type 
  18721.            char should be signed or unsigned by default.  The user can always 
  18722.            override this default with the options `-fsigned-char' and 
  18723.            `-funsigned-char'. 
  18724.  
  18725.  DEFAULT_SHORT_ENUMS 
  18726.            A C expression to determine whether to give an enum type only as 
  18727.            many bytes as it takes to represent the range of possible values of 
  18728.            that type.  A nonzero value means to do that; a zero value means all 
  18729.            enum types should be allocated like int. 
  18730.  
  18731.            If you don't define the macro, the default is 0. 
  18732.  
  18733.  SIZE_TYPE 
  18734.            A C expression for a string describing the name of the data type to 
  18735.            use for size values.  The typedef name size_t is defined using the 
  18736.            contents of the string. 
  18737.  
  18738.            The string can contain more than one keyword.  If so, separate them 
  18739.            with spaces, and write first any length keyword, then unsigned if 
  18740.            appropriate, and finally int.  The string must exactly match one of 
  18741.            the data type names defined in the function init_decl_processing in 
  18742.            the file `c-decl.c'.  You may not omit int or change the 
  18743.            order---that would cause the compiler to crash on startup. 
  18744.  
  18745.            If you don't define this macro, the default is "long unsigned int". 
  18746.  
  18747.  PTRDIFF_TYPE 
  18748.            A C expression for a string describing the name of the data type to 
  18749.            use for the result of subtracting two pointers.  The typedef name 
  18750.            ptrdiff_t is defined using the contents of the string.  See 
  18751.            SIZE_TYPE above for more information. 
  18752.  
  18753.            If you don't define this macro, the default is "long int". 
  18754.  
  18755.  WCHAR_TYPE 
  18756.            A C expression for a string describing the name of the data type to 
  18757.            use for wide characters.  The typedef name wchar_t is defined using 
  18758.            the contents of the string.  See SIZE_TYPE above for more 
  18759.            information. 
  18760.  
  18761.            If you don't define this macro, the default is "int". 
  18762.  
  18763.  WCHAR_TYPE_SIZE 
  18764.            A C expression for the size in bits of the data type for wide 
  18765.            characters.  This is used in cpp, which cannot make use of 
  18766.            WCHAR_TYPE. 
  18767.  
  18768.  MAX_WCHAR_TYPE_SIZE 
  18769.            Maximum number for the size in bits of the data type for wide 
  18770.            characters.  If this is undefined, the default is WCHAR_TYPE_SIZE. 
  18771.            Otherwise, it is the constant value that is the largest value that 
  18772.            WCHAR_TYPE_SIZE can have at run-time.  This is used in cpp. 
  18773.  
  18774.  OBJC_INT_SELECTORS 
  18775.            Define this macro if the type of Objective C selectors should be 
  18776.            int. 
  18777.  
  18778.            If this macro is not defined, then selectors should have the type 
  18779.            struct objc_selector *. 
  18780.  
  18781.  OBJC_SELECTORS_WITHOUT_LABELS 
  18782.            Define this macro if the compiler can group all the selectors 
  18783.            together into a vector and use just one label at the beginning of 
  18784.            the vector. Otherwise, the compiler must give each selector its own 
  18785.            assembler label. 
  18786.  
  18787.            On certain machines, it is important to have a separate label for 
  18788.            each selector because this enables the linker to eliminate duplicate 
  18789.            selectors. 
  18790.  
  18791.  TARGET_BELL 
  18792.            A C constant expression for the integer value for escape sequence 
  18793.            `\a'. 
  18794.  
  18795.  TARGET_BS 
  18796.  TARGET_TAB 
  18797.  TARGET_NEWLINE 
  18798.            C constant expressions for the integer values for escape sequences 
  18799.            `\b', `\t' and `\n'. 
  18800.  
  18801.  TARGET_VT 
  18802.  TARGET_FF 
  18803.  TARGET_CR 
  18804.            C constant expressions for the integer values for escape sequences 
  18805.            `\v', `\f' and `\r'. 
  18806.  
  18807.  
  18808. ΓòÉΓòÉΓòÉ 21.5. Register Usage ΓòÉΓòÉΓòÉ
  18809.  
  18810. This section explains how to describe what registers the target machine has, 
  18811. and how (in general) they can be used. 
  18812.  
  18813. The description of which registers a specific instruction can use is done with 
  18814. register classes; see Register Classes.  For information on using registers to 
  18815. access a stack frame, see Frame Registers. For passing values in registers, see 
  18816. Register Arguments. For returning values in registers, see Scalar Return. 
  18817.  
  18818.  Register Basics                         Number and kinds of registers. 
  18819.  Allocation Order                        Order in which registers are 
  18820.                                          allocated. 
  18821.  Values in Registers                     What kinds of values each reg can 
  18822.                                          hold. 
  18823.  Leaf Functions                          Renumbering registers for leaf 
  18824.                                          functions. 
  18825.  Stack Registers                         Handling a register stack such as 
  18826.                                          80387. 
  18827.  Obsolete Register Macros                Macros formerly used for the 80387. 
  18828.  
  18829.  
  18830. ΓòÉΓòÉΓòÉ 21.5.1. Basic Characteristics of Registers ΓòÉΓòÉΓòÉ
  18831.  
  18832. Registers have various characteristics. 
  18833.  
  18834.  FIRST_PSEUDO_REGISTER 
  18835.            Number of hardware registers known to the compiler.  They receive 
  18836.            numbers 0 through FIRST_PSEUDO_REGISTER-1; thus, the first pseudo 
  18837.            register's number really is assigned the number 
  18838.            FIRST_PSEUDO_REGISTER. 
  18839.  
  18840.  FIXED_REGISTERS 
  18841.            An initializer that says which registers are used for fixed purposes 
  18842.            all throughout the compiled code and are therefore not available for 
  18843.            general allocation.  These would include the stack pointer, the 
  18844.            frame pointer (except on machines where that can be used as a 
  18845.            general register when no frame pointer is needed), the program 
  18846.            counter on machines where that is considered one of the addressable 
  18847.            registers, and any other numbered register with a standard use. 
  18848.  
  18849.            This information is expressed as a sequence of numbers, separated by 
  18850.            commas and surrounded by braces.  The nth number is 1 if register n 
  18851.            is fixed, 0 otherwise. 
  18852.  
  18853.            The table initialized from this macro, and the table initialized by 
  18854.            the following one, may be overridden at run time either 
  18855.            automatically, by the actions of the macro 
  18856.            CONDITIONAL_REGISTER_USAGE, or by the user with the command options 
  18857.            `-ffixed-reg', `-fcall-used-reg' and `-fcall-saved-reg'. 
  18858.  
  18859.  CALL_USED_REGISTERS 
  18860.            Like FIXED_REGISTERS but has 1 for each register that is clobbered 
  18861.            (in general) by function calls as well as for fixed registers.  This 
  18862.            macro therefore identifies the registers that are not available for 
  18863.            general allocation of values that must live across function calls. 
  18864.  
  18865.            If a register has 0 in CALL_USED_REGISTERS, the compiler 
  18866.            automatically saves it on function entry and restores it on function 
  18867.            exit, if the register is used within the function. 
  18868.  
  18869.  CONDITIONAL_REGISTER_USAGE 
  18870.            Zero or more C statements that may conditionally modify two 
  18871.            variables fixed_regs and call_used_regs (both of type char []) after 
  18872.            they have been initialized from the two preceding macros. 
  18873.  
  18874.            This is necessary in case the fixed or call-clobbered registers 
  18875.            depend on target flags. 
  18876.  
  18877.            You need not define this macro if it has no work to do. 
  18878.  
  18879.            If the usage of an entire class of registers depends on the target 
  18880.            flags, you may indicate this to GCC by using this macro to modify 
  18881.            fixed_regs and call_used_regs to 1 for each of the registers in the 
  18882.            classes which should not be used by GCC.  Also define the macro 
  18883.            REG_CLASS_FROM_LETTER to return NO_REGS if it is called with a 
  18884.            letter for a class that shouldn't be used. 
  18885.  
  18886.            (However, if this class is not included in GENERAL_REGS and all of 
  18887.            the insn patterns whose constraints permit this class are controlled 
  18888.            by target switches, then GCC will automatically avoid using these 
  18889.            registers when the target switches are opposed to them.) 
  18890.  
  18891.  NON_SAVING_SETJMP 
  18892.            If this macro is defined and has a nonzero value, it means that 
  18893.            setjmp and related functions fail to save the registers, or that 
  18894.            longjmp fails to restore them.  To compensate, the compiler avoids 
  18895.            putting variables in registers in functions that use setjmp. 
  18896.  
  18897.  INCOMING_REGNO (out) 
  18898.            Define this macro if the target machine has register windows.  This 
  18899.            C expression returns the register number as seen by the called 
  18900.            function corresponding to the register number out as seen by the 
  18901.            calling function.  Return out if register number out is not an 
  18902.            outbound register. 
  18903.  
  18904.  OUTGOING_REGNO (in) 
  18905.            Define this macro if the target machine has register windows.  This 
  18906.            C expression returns the register number as seen by the calling 
  18907.            function corresponding to the register number in as seen by the 
  18908.            called function.  Return in if register number in is not an inbound 
  18909.            register. 
  18910.  
  18911.  
  18912. ΓòÉΓòÉΓòÉ 21.5.2. Order of Allocation of Registers ΓòÉΓòÉΓòÉ
  18913.  
  18914. Registers are allocated in order. 
  18915.  
  18916.  REG_ALLOC_ORDER 
  18917.            If defined, an initializer for a vector of integers, containing the 
  18918.            numbers of hard registers in the order in which GNU CC should prefer 
  18919.            to use them (from most preferred to least). 
  18920.  
  18921.            If this macro is not defined, registers are used lowest numbered 
  18922.            first (all else being equal). 
  18923.  
  18924.            One use of this macro is on machines where the highest numbered 
  18925.            registers must always be saved and the save-multiple-registers 
  18926.            instruction supports only sequences of consecutive registers.  On 
  18927.            such machines, define REG_ALLOC_ORDER to be an initializer that 
  18928.            lists the highest numbered allocatable register first. 
  18929.  
  18930.  ORDER_REGS_FOR_LOCAL_ALLOC 
  18931.            A C statement (sans semicolon) to choose the order in which to 
  18932.            allocate hard registers for pseudo-registers local to a basic block. 
  18933.  
  18934.            Store the desired register order in the array reg_alloc_order. 
  18935.            Element 0 should be the register to allocate first; element 1, the 
  18936.            next register; and so on. 
  18937.  
  18938.            The macro body should not assume anything about the contents of 
  18939.            reg_alloc_order before execution of the macro. 
  18940.  
  18941.            On most machines, it is not necessary to define this macro. 
  18942.  
  18943.  
  18944. ΓòÉΓòÉΓòÉ 21.5.3. How Values Fit in Registers ΓòÉΓòÉΓòÉ
  18945.  
  18946. This section discusses the macros that describe which kinds of values 
  18947. (specifically, which machine modes) each register can hold, and how many 
  18948. consecutive registers are needed for a given mode. 
  18949.  
  18950.  HARD_REGNO_NREGS (regno, mode) 
  18951.            A C expression for the number of consecutive hard registers, 
  18952.            starting at register number regno, required to hold a value of mode 
  18953.            mode. 
  18954.  
  18955.            On a machine where all registers are exactly one word, a suitable 
  18956.            definition of this macro is 
  18957.  
  18958.                       #define HARD_REGNO_NREGS(REGNO, MODE)            \
  18959.                          ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
  18960.                           / UNITS_PER_WORD))
  18961.  
  18962.  HARD_REGNO_MODE_OK (regno, mode) 
  18963.            A C expression that is nonzero if it is permissible to store a value 
  18964.            of mode mode in hard register number regno (or in several registers 
  18965.            starting with that one).  For a machine where all registers are 
  18966.            equivalent, a suitable definition is 
  18967.  
  18968.                       #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
  18969.  
  18970.            It is not necessary for this macro to check for the numbers of fixed 
  18971.            registers, because the allocation mechanism considers them to be 
  18972.            always occupied. 
  18973.  
  18974.            On some machines, double-precision values must be kept in even/odd 
  18975.            register pairs.  The way to implement that is to define this macro 
  18976.            to reject odd register numbers for such modes. 
  18977.  
  18978.            The minimum requirement for a mode to be OK in a register is that 
  18979.            the `movmode' instruction pattern support moves between the register 
  18980.            and any other hard register for which the mode is OK; and that 
  18981.            moving a value into the register and back out not alter it. 
  18982.  
  18983.            Since the same instruction used to move SImode will work for all 
  18984.            narrower integer modes, it is not necessary on any machine for 
  18985.            HARD_REGNO_MODE_OK to distinguish between these modes, provided you 
  18986.            define patterns `movhi', etc., to take advantage of this.  This is 
  18987.            useful because of the interaction between HARD_REGNO_MODE_OK and 
  18988.            MODES_TIEABLE_P; it is very desirable for all integer modes to be 
  18989.            tieable. 
  18990.  
  18991.            Many machines have special registers for floating point arithmetic. 
  18992.            Often people assume that floating point machine modes are allowed 
  18993.            only in floating point registers.  This is not true.  Any registers 
  18994.            that can hold integers can safely hold a floating point machine 
  18995.            mode, whether or not floating arithmetic can be done on it in those 
  18996.            registers.  Integer move instructions can be used to move the 
  18997.            values. 
  18998.  
  18999.            On some machines, though, the converse is true: fixed-point machine 
  19000.            modes may not go in floating registers.  This is true if the 
  19001.            floating registers normalize any value stored in them, because 
  19002.            storing a non-floating value there would garble it.  In this case, 
  19003.            HARD_REGNO_MODE_OK should reject fixed-point machine modes in 
  19004.            floating registers.  But if the floating registers do not 
  19005.            automatically normalize, if you can store any bit pattern in one and 
  19006.            retrieve it unchanged without a trap, then any machine mode may go 
  19007.            in a floating register, so you can define this macro to say so. 
  19008.  
  19009.            The primary significance of special floating registers is rather 
  19010.            that they are the registers acceptable in floating point arithmetic 
  19011.            instructions.  However, this is of no concern to HARD_REGNO_MODE_OK. 
  19012.            You handle it by writing the proper constraints for those 
  19013.            instructions. 
  19014.  
  19015.            On some machines, the floating registers are especially slow to 
  19016.            access, so that it is better to store a value in a stack frame than 
  19017.            in such a register if floating point arithmetic is not being done. 
  19018.            As long as the floating registers are not in class GENERAL_REGS, 
  19019.            they will not be used unless some pattern's constraint asks for one. 
  19020.  
  19021.  MODES_TIEABLE_P (mode1, mode2) 
  19022.            A C expression that is nonzero if it is desirable to choose register 
  19023.            allocation so as to avoid move instructions between a value of mode 
  19024.            mode1 and a value of mode mode2. 
  19025.  
  19026.            If HARD_REGNO_MODE_OK ( r, mode1) and HARD_REGNO_MODE_OK (r, mode2) 
  19027.            are ever different for any r, then MODES_TIEABLE_P (mode1, mode2) 
  19028.            must be zero. 
  19029.  
  19030.  
  19031. ΓòÉΓòÉΓòÉ 21.5.4. Handling Leaf Functions ΓòÉΓòÉΓòÉ
  19032.  
  19033. On some machines, a leaf function (i.e., one which makes no calls) can run more 
  19034. efficiently if it does not make its own register window.  Often this means it 
  19035. is required to receive its arguments in the registers where they are passed by 
  19036. the caller, instead of the registers where they would normally arrive. 
  19037.  
  19038. The special treatment for leaf functions generally applies only when other 
  19039. conditions are met; for example, often they may use only those registers for 
  19040. its own variables and temporaries.  We use the term ``leaf function'' to mean a 
  19041. function that is suitable for this special handling, so that functions with no 
  19042. calls are not necessarily ``leaf functions''. 
  19043.  
  19044. GNU CC assigns register numbers before it knows whether the function is 
  19045. suitable for leaf function treatment.  So it needs to renumber the registers in 
  19046. order to output a leaf function.  The following macros accomplish this. 
  19047.  
  19048.  LEAF_REGISTERS 
  19049.            A C initializer for a vector, indexed by hard register number, which 
  19050.            contains 1 for a register that is allowable in a candidate for leaf 
  19051.            function treatment. 
  19052.  
  19053.            If leaf function treatment involves renumbering the registers, then 
  19054.            the registers marked here should be the ones before 
  19055.            renumbering---those that GNU CC would ordinarily allocate.  The 
  19056.            registers which will actually be used in the assembler code, after 
  19057.            renumbering, should not be marked with 1 in this vector. 
  19058.  
  19059.            Define this macro only if the target machine offers a way to 
  19060.            optimize the treatment of leaf functions. 
  19061.  
  19062.  LEAF_REG_REMAP (regno) 
  19063.            A C expression whose value is the register number to which regno 
  19064.            should be renumbered, when a function is treated as a leaf function. 
  19065.  
  19066.            If regno is a register number which should not appear in a leaf 
  19067.            function before renumbering, then the expression should yield -1, 
  19068.            which will cause the compiler to abort. 
  19069.  
  19070.            Define this macro only if the target machine offers a way to 
  19071.            optimize the treatment of leaf functions, and registers need to be 
  19072.            renumbered to do this. 
  19073.  
  19074.  Normally, FUNCTION_PROLOGUE and FUNCTION_EPILOGUE must treat leaf functions 
  19075.  specially.  It can test the C variable leaf_function which is nonzero for leaf 
  19076.  functions.  (The variable leaf_function is defined only if LEAF_REGISTERS is 
  19077.  defined.) 
  19078.  
  19079.  
  19080. ΓòÉΓòÉΓòÉ 21.5.5. Registers That Form a Stack ΓòÉΓòÉΓòÉ
  19081.  
  19082. There are special features to handle computers where some of the ``registers'' 
  19083. form a stack, as in the 80387 coprocessor for the 80386. Stack registers are 
  19084. normally written by pushing onto the stack, and are numbered relative to the 
  19085. top of the stack. 
  19086.  
  19087. Currently, GNU CC can only handle one group of stack-like registers, and they 
  19088. must be consecutively numbered. 
  19089.  
  19090.  STACK_REGS 
  19091.            Define this if the machine has any stack-like registers. 
  19092.  
  19093.  FIRST_STACK_REG 
  19094.            The number of the first stack-like register.  This one is the top of 
  19095.            the stack. 
  19096.  
  19097.  LAST_STACK_REG 
  19098.            The number of the last stack-like register.  This one is the bottom 
  19099.            of the stack. 
  19100.  
  19101.  
  19102. ΓòÉΓòÉΓòÉ 21.5.6. Obsolete Macros for Controlling Register Usage ΓòÉΓòÉΓòÉ
  19103.  
  19104. These features do not work very well.  They exist because they used to be 
  19105. required to generate correct code for the 80387 coprocessor of the 80386.  They 
  19106. are no longer used by that machine description and may be removed in a later 
  19107. version of the compiler.  Don't use them! 
  19108.  
  19109.  OVERLAPPING_REGNO_P (regno) 
  19110.            If defined, this is a C expression whose value is nonzero if hard 
  19111.            register number regno is an overlapping register.  This means a hard 
  19112.            register which overlaps a hard register with a different number. 
  19113.            (Such overlap is undesirable, but occasionally it allows a machine 
  19114.            to be supported which otherwise could not be.)  This macro must 
  19115.            return nonzero for all the registers which overlap each other.  GNU 
  19116.            CC can use an overlapping register only in certain limited ways.  It 
  19117.            can be used for allocation within a basic block, and may be spilled 
  19118.            for reloading; that is all. 
  19119.  
  19120.            If this macro is not defined, it means that none of the hard 
  19121.            registers overlap each other.  This is the usual situation. 
  19122.  
  19123.  INSN_CLOBBERS_REGNO_P (insn, regno) 
  19124.            If defined, this is a C expression whose value should be nonzero if 
  19125.            the insn insn has the effect of mysteriously clobbering the contents 
  19126.            of hard register number regno.  By ``mysterious'' we mean that the 
  19127.            insn's RTL expression doesn't describe such an effect. 
  19128.  
  19129.            If this macro is not defined, it means that no insn clobbers 
  19130.            registers mysteriously.  This is the usual situation; all else being 
  19131.            equal, it is best for the RTL expression to show all the activity. 
  19132.  
  19133.  PRESERVE_DEATH_INFO_REGNO_P (regno) 
  19134.            If defined, this is a C expression whose value is nonzero if 
  19135.            accurate REG_DEAD notes are needed for hard register number regno at 
  19136.            the time of outputting the assembler code.  When this is so, a few 
  19137.            optimizations that take place after register allocation and could 
  19138.            invalidate the death notes are not done when this register is 
  19139.            involved. 
  19140.  
  19141.            You would arrange to preserve death info for a register when some of 
  19142.            the code in the machine description which is executed to write the 
  19143.            assembler code looks at the death notes.  This is necessary only 
  19144.            when the actual hardware feature which GNU CC thinks of as a 
  19145.            register is not actually a register of the usual sort.  (It might, 
  19146.            for example, be a hardware stack.) 
  19147.  
  19148.            If this macro is not defined, it means that no death notes need to 
  19149.            be preserved.  This is the usual situation. 
  19150.  
  19151.  
  19152. ΓòÉΓòÉΓòÉ 21.6. Register Classes ΓòÉΓòÉΓòÉ
  19153.  
  19154. On many machines, the numbered registers are not all equivalent. For example, 
  19155. certain registers may not be allowed for indexed addressing; certain registers 
  19156. may not be allowed in some instructions.  These machine restrictions are 
  19157. described to the compiler using register classes. 
  19158.  
  19159. You define a number of register classes, giving each one a name and saying 
  19160. which of the registers belong to it.  Then you can specify register classes 
  19161. that are allowed as operands to particular instruction patterns. 
  19162.  
  19163. In general, each register will belong to several classes.  In fact, one class 
  19164. must be named ALL_REGS and contain all the registers.  Another class must be 
  19165. named NO_REGS and contain no registers.  Often the union of two classes will be 
  19166. another class; however, this is not required. 
  19167.  
  19168. One of the classes must be named GENERAL_REGS.  There is nothing terribly 
  19169. special about the name, but the operand constraint letters `r' and `g' specify 
  19170. this class.  If GENERAL_REGS is the same as ALL_REGS, just define it as a macro 
  19171. which expands to ALL_REGS. 
  19172.  
  19173. Order the classes so that if class x is contained in class y then x has a lower 
  19174. class number than y. 
  19175.  
  19176. The way classes other than GENERAL_REGS are specified in operand constraints is 
  19177. through machine-dependent operand constraint letters. You can define such 
  19178. letters to correspond to various classes, then use them in operand constraints. 
  19179.  
  19180. You should define a class for the union of two classes whenever some 
  19181. instruction allows both classes.  For example, if an instruction allows either 
  19182. a floating point (coprocessor) register or a general register for a certain 
  19183. operand, you should define a class FLOAT_OR_GENERAL_REGS which includes both of 
  19184. them.  Otherwise you will get suboptimal code. 
  19185.  
  19186. You must also specify certain redundant information about the register classes: 
  19187. for each class, which classes contain it and which ones are contained in it; 
  19188. for each pair of classes, the largest class contained in their union. 
  19189.  
  19190. When a value occupying several consecutive registers is expected in a certain 
  19191. class, all the registers used must belong to that class. Therefore, register 
  19192. classes cannot be used to enforce a requirement for a register pair to start 
  19193. with an even-numbered register.  The way to specify this requirement is with 
  19194. HARD_REGNO_MODE_OK. 
  19195.  
  19196. Register classes used for input-operands of bitwise-and or shift instructions 
  19197. have a special requirement: each such class must have, for each fixed-point 
  19198. machine mode, a subclass whose registers can transfer that mode to or from 
  19199. memory.  For example, on some machines, the operations for single-byte values 
  19200. (QImode) are limited to certain registers.  When this is so, each register 
  19201. class that is used in a bitwise-and or shift instruction must have a subclass 
  19202. consisting of registers from which single-byte values can be loaded or stored. 
  19203. This is so that PREFERRED_RELOAD_CLASS can always have a possible value to 
  19204. return. 
  19205.  
  19206.  enum reg_class 
  19207.            An enumeral type that must be defined with all the register class 
  19208.            names as enumeral values.  NO_REGS must be first.  ALL_REGS must be 
  19209.            the last register class, followed by one more enumeral value, 
  19210.            LIM_REG_CLASSES, which is not a register class but rather tells how 
  19211.            many classes there are. 
  19212.  
  19213.            Each register class has a number, which is the value of casting the 
  19214.            class name to type int.  The number serves as an index in many of 
  19215.            the tables described below. 
  19216.  
  19217.  N_REG_CLASSES 
  19218.            The number of distinct register classes, defined as follows: 
  19219.  
  19220.                       #define N_REG_CLASSES (int) LIM_REG_CLASSES
  19221.  
  19222.  REG_CLASS_NAMES 
  19223.            An initializer containing the names of the register classes as C 
  19224.            string constants.  These names are used in writing some of the 
  19225.            debugging dumps. 
  19226.  
  19227.  REG_CLASS_CONTENTS 
  19228.            An initializer containing the contents of the register classes, as 
  19229.            integers which are bit masks.  The nth integer specifies the 
  19230.            contents of class n.  The way the integer mask is interpreted is 
  19231.            that register r is in the class if mask & (1 << r) is 1. 
  19232.  
  19233.            When the machine has more than 32 registers, an integer does not 
  19234.            suffice. Then the integers are replaced by sub-initializers, braced 
  19235.            groupings containing several integers.  Each sub-initializer must be 
  19236.            suitable as an initializer for the type HARD_REG_SET which is 
  19237.            defined in `hard-reg-set.h'. 
  19238.  
  19239.  REGNO_REG_CLASS (regno) 
  19240.            A C expression whose value is a register class containing hard 
  19241.            register regno.  In general there is more than one such class; 
  19242.            choose a class which is minimal, meaning that no smaller class also 
  19243.            contains the register. 
  19244.  
  19245.  BASE_REG_CLASS 
  19246.            A macro whose definition is the name of the class to which a valid 
  19247.            base register must belong.  A base register is one used in an 
  19248.            address which is the register value plus a displacement. 
  19249.  
  19250.  INDEX_REG_CLASS 
  19251.            A macro whose definition is the name of the class to which a valid 
  19252.            index register must belong.  An index register is one used in an 
  19253.            address where its value is either multiplied by a scale factor or 
  19254.            added to another register (as well as added to a displacement). 
  19255.  
  19256.  REG_CLASS_FROM_LETTER (char) 
  19257.            A C expression which defines the machine-dependent operand 
  19258.            constraint letters for register classes.  If char is such a letter, 
  19259.            the value should be the register class corresponding to it. 
  19260.            Otherwise, the value should be NO_REGS.  The register letter `r', 
  19261.            corresponding to class GENERAL_REGS, will not be passed to this 
  19262.            macro; you do not need to handle it. 
  19263.  
  19264.  REGNO_OK_FOR_BASE_P (num) 
  19265.            A C expression which is nonzero if register number num is suitable 
  19266.            for use as a base register in operand addresses.  It may be either a 
  19267.            suitable hard register or a pseudo register that has been allocated 
  19268.            such a hard register. 
  19269.  
  19270.  REGNO_OK_FOR_INDEX_P (num) 
  19271.            A C expression which is nonzero if register number num is suitable 
  19272.            for use as an index register in operand addresses.  It may be either 
  19273.            a suitable hard register or a pseudo register that has been 
  19274.            allocated such a hard register. 
  19275.  
  19276.            The difference between an index register and a base register is that 
  19277.            the index register may be scaled.  If an address involves the sum of 
  19278.            two registers, neither one of them scaled, then either one may be 
  19279.            labeled the ``base'' and the other the ``index''; but whichever 
  19280.            labeling is used must fit the machine's constraints of which 
  19281.            registers may serve in each capacity.  The compiler will try both 
  19282.            labelings, looking for one that is valid, and will reload one or 
  19283.            both registers only if neither labeling works. 
  19284.  
  19285.  PREFERRED_RELOAD_CLASS (x, class) 
  19286.            A C expression that places additional restrictions on the register 
  19287.            class to use when it is necessary to copy value x into a register in 
  19288.            class class.  The value is a register class; perhaps class, or 
  19289.            perhaps another, smaller class.  On many machines, the following 
  19290.            definition is safe: 
  19291.  
  19292.                       #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
  19293.  
  19294.            Sometimes returning a more restrictive class makes better code.  For 
  19295.            example, on the 68000, when x is an integer constant that is in 
  19296.            range for a `moveq' instruction, the value of this macro is always 
  19297.            DATA_REGS as long as class includes the data registers. Requiring a 
  19298.            data register guarantees that a `moveq' will be used. 
  19299.  
  19300.            If x is a const_double, by returning NO_REGS you can force x into a 
  19301.            memory constant.  This is useful on certain machines where immediate 
  19302.            floating values cannot be loaded into certain kinds of registers. 
  19303.  
  19304.  PREFERRED_OUTPUT_RELOAD_CLASS (x, class) 
  19305.            Like PREFERRED_RELOAD_CLASS, but for output reloads instead of input 
  19306.            reloads.  If you don't define this macro, the default is to use 
  19307.            class, unchanged. 
  19308.  
  19309.  LIMIT_RELOAD_CLASS (mode, class) 
  19310.            A C expression that places additional restrictions on the register 
  19311.            class to use when it is necessary to be able to hold a value of mode 
  19312.            mode in a reload register for which class class would ordinarily be 
  19313.            used. 
  19314.  
  19315.            Unlike PREFERRED_RELOAD_CLASS, this macro should be used when there 
  19316.            are certain modes that simply can't go in certain reload classes. 
  19317.  
  19318.            The value is a register class; perhaps class, or perhaps another, 
  19319.            smaller class. 
  19320.  
  19321.            Don't define this macro unless the target machine has limitations 
  19322.            which require the macro to do something nontrivial. 
  19323.  
  19324.  SECONDARY_RELOAD_CLASS (class, mode, x) 
  19325.  SECONDARY_INPUT_RELOAD_CLASS (class, mode, x) 
  19326.  SECONDARY_OUTPUT_RELOAD_CLASS (class, mode, x) 
  19327.            Many machines have some registers that cannot be copied directly to 
  19328.            or from memory or even from other types of registers.  An example is 
  19329.            the `MQ' register, which on most machines, can only be copied to or 
  19330.            from general registers, but not memory.  Some machines allow copying 
  19331.            all registers to and from memory, but require a scratch register for 
  19332.            stores to some memory locations (e.g., those with symbolic address 
  19333.            on the RT, and those with certain symbolic address on the Sparc when 
  19334.            compiling PIC).  In some cases, both an intermediate and a scratch 
  19335.            register are required. 
  19336.  
  19337.            You should define these macros to indicate to the reload phase that 
  19338.            it may need to allocate at least one register for a reload in 
  19339.            addition to the register to contain the data.  Specifically, if 
  19340.            copying x to a register class in mode requires an intermediate 
  19341.            register, you should define SECONDARY_INPUT_RELOAD_CLASS to return 
  19342.            the largest register class all of whose registers can be used as 
  19343.            intermediate registers or scratch registers. 
  19344.  
  19345.            If copying a register class in mode to x requires an intermediate or 
  19346.            scratch register, SECONDARY_OUTPUT_RELOAD_CLASS should be defined to 
  19347.            return the largest register class required.  If the requirements for 
  19348.            input and output reloads are the same, the macro 
  19349.            SECONDARY_RELOAD_CLASS should be used instead of defining both 
  19350.            macros identically. 
  19351.  
  19352.            The values returned by these macros are often GENERAL_REGS. Return 
  19353.            NO_REGS if no spare register is needed; i.e., if x can be directly 
  19354.            copied to or from a register of class in mode without requiring a 
  19355.            scratch register.  Do not define this macro if it would always 
  19356.            return NO_REGS. 
  19357.  
  19358.            If a scratch register is required (either with or without an 
  19359.            intermediate register), you should define patterns for `reload_inm' 
  19360.            or `reload_outm', as required (see Standard Names.  These patterns, 
  19361.            which will normally be implemented with a define_expand, should be 
  19362.            similar to the `movm' patterns, except that operand 2 is the scratch 
  19363.            register. 
  19364.  
  19365.            Define constraints for the reload register and scratch register that 
  19366.            contain a single register class.  If the original reload register 
  19367.            (whose class is class) can meet the constraint given in the pattern, 
  19368.            the value returned by these macros is used for the class of the 
  19369.            scratch register.  Otherwise, two additional reload registers are 
  19370.            required. Their classes are obtained from the constraints in the 
  19371.            insn pattern. 
  19372.  
  19373.            x might be a pseudo-register or a subreg of a pseudo-register, which 
  19374.            could either be in a hard register or in memory. Use true_regnum to 
  19375.            find out; it will return -1 if the pseudo is in memory and the hard 
  19376.            register number if it is in a register. 
  19377.  
  19378.            These macros should not be used in the case where a particular class 
  19379.            of registers can only be copied to memory and not to another class 
  19380.            of registers.  In that case, secondary reload registers are not 
  19381.            needed and would not be helpful.  Instead, a stack location must be 
  19382.            used to perform the copy and the movm pattern should use memory as a 
  19383.            intermediate storage.  This case often occurs between floating-point 
  19384.            and general registers. 
  19385.  
  19386.  SECONDARY_MEMORY_NEEDED (class1, class2, m) 
  19387.            Certain machines have the property that some registers cannot be 
  19388.            copied to some other registers without using memory.  Define this 
  19389.            macro on those machines to be a C expression that is non-zero if 
  19390.            objects of mode m in registers of class1 can only be copied to 
  19391.            registers of class class2 by storing a register of class1 into 
  19392.            memory and loading that memory location into a register of class2. 
  19393.  
  19394.            Do not define this macro if its value would always be zero. 
  19395.  
  19396.  SECONDARY_MEMORY_NEEDED_RTX (mode) 
  19397.            Normally when SECONDARY_MEMORY_NEEDED is defined, the compiler 
  19398.            allocates a stack slot for a memory location needed for register 
  19399.            copies. If this macro is defined, the compiler instead uses the 
  19400.            memory location defined by this macro. 
  19401.  
  19402.            Do not define this macro if you do not define 
  19403.            SECONDARY_MEMORY_NEEDED. 
  19404.  
  19405.  SECONDARY_MEMORY_NEEDED_MODE (mode) 
  19406.            When the compiler needs a secondary memory location to copy between 
  19407.            two registers of mode mode, it normally allocates sufficient memory 
  19408.            to hold a quantity of BITS_PER_WORD bits and performs the store and 
  19409.            load operations in a mode that many bits wide and whose class is the 
  19410.            same as that of mode. 
  19411.  
  19412.            This is right thing to do on most machines because it ensures that 
  19413.            all bits of the register are copied and prevents accesses to the 
  19414.            registers in a narrower mode, which some machines prohibit for 
  19415.            floating-point registers. 
  19416.  
  19417.            However, this default behavior is not correct on some machines, such 
  19418.            as the DEC Alpha, that store short integers in floating-point 
  19419.            registers differently than in integer registers.  On those machines, 
  19420.            the default widening will not work correctly and you must define 
  19421.            this macro to suppress that widening in some cases.  See the file 
  19422.            `alpha.h' for details. 
  19423.  
  19424.            Do not define this macro if you do not define 
  19425.            SECONDARY_MEMORY_NEEDED or if widening mode to a mode that is 
  19426.            BITS_PER_WORD bits wide is correct for your machine. 
  19427.  
  19428.  SMALL_REGISTER_CLASSES 
  19429.            Normally the compiler avoids choosing registers that have been 
  19430.            explicitly mentioned in the rtl as spill registers (these registers 
  19431.            are normally those used to pass parameters and return values). 
  19432.            However, some machines have so few registers of certain classes that 
  19433.            there would not be enough registers to use as spill registers if 
  19434.            this were done. 
  19435.  
  19436.            Define SMALL_REGISTER_CLASSES on these machines.  When it is 
  19437.            defined, the compiler allows registers explicitly used in the rtl to 
  19438.            be used as spill registers but avoids extending the lifetime of 
  19439.            these registers. 
  19440.  
  19441.            It is always safe to define this macro, but if you unnecessarily 
  19442.            define it, you will reduce the amount of optimizations that can be 
  19443.            performed in some cases.  If you do not define this macro when it is 
  19444.            required, the compiler will run out of spill registers and print a 
  19445.            fatal error message.  For most machines, you should not define this 
  19446.            macro. 
  19447.  
  19448.  CLASS_LIKELY_SPILLED_P (class) 
  19449.            A C expression whose value is nonzero if pseudos that have been 
  19450.            assigned to registers of class class would likely be spilled because 
  19451.            registers of class are needed for spill registers. 
  19452.  
  19453.            The default value of this macro returns 1 if class has exactly one 
  19454.            register and zero otherwise.  On most machines, this default should 
  19455.            be used.  Only define this macro to some other expression if pseudo 
  19456.            allocated by `local-alloc.c' end up in memory because their hard 
  19457.            registers were needed for spill registers.  If this macro returns 
  19458.            nonzero for those classes, those pseudos will only be allocated by 
  19459.            `global.c', which knows how to reallocate the pseudo to another 
  19460.            register.  If there would not be another register available for 
  19461.            reallocation, you should not change the definition of this macro 
  19462.            since the only effect of such a definition would be to slow down 
  19463.            register allocation. 
  19464.  
  19465.  CLASS_MAX_NREGS (class, mode) 
  19466.            A C expression for the maximum number of consecutive registers of 
  19467.            class class needed to hold a value of mode mode. 
  19468.  
  19469.            This is closely related to the macro HARD_REGNO_NREGS.  In fact, the 
  19470.            value of the macro CLASS_MAX_NREGS (class, mode) should be the 
  19471.            maximum value of HARD_REGNO_NREGS (regno, mode) for all regno values 
  19472.            in the class class. 
  19473.  
  19474.            This macro helps control the handling of multiple-word values in the 
  19475.            reload pass. 
  19476.  
  19477.  CLASS_CANNOT_CHANGE_SIZE 
  19478.            If defined, a C expression for a class that contains registers which 
  19479.            the compiler must always access in a mode that is the same size as 
  19480.            the mode in which it loaded the register. 
  19481.  
  19482.            For the example, loading 32-bit integer or floating-point objects 
  19483.            into floating-point registers on the Alpha extends them to 64-bits. 
  19484.            Therefore loading a 64-bit object and then storing it as a 32-bit 
  19485.            object does not store the low-order 32-bits, as would be the case 
  19486.            for a normal register.  Therefore, `alpha.h' defines this macro as 
  19487.            FLOAT_REGS. 
  19488.  
  19489.  Three other special macros describe which operands fit which constraint 
  19490.  letters. 
  19491.  
  19492.  CONST_OK_FOR_LETTER_P (value, c) 
  19493.            A C expression that defines the machine-dependent operand constraint 
  19494.            letters that specify particular ranges of integer values.  If c is 
  19495.            one of those letters, the expression should check that value, an 
  19496.            integer, is in the appropriate range and return 1 if so, 0 
  19497.            otherwise.  If c is not one of those letters, the value should be 0 
  19498.            regardless of value. 
  19499.  
  19500.  CONST_DOUBLE_OK_FOR_LETTER_P (value, c) 
  19501.            A C expression that defines the machine-dependent operand constraint 
  19502.            letters that specify particular ranges of const_double values. 
  19503.  
  19504.            If c is one of those letters, the expression should check that 
  19505.            value, an RTX of code const_double, is in the appropriate range and 
  19506.            return 1 if so, 0 otherwise.  If c is not one of those letters, the 
  19507.            value should be 0 regardless of value. 
  19508.  
  19509.            const_double is used for all floating-point constants and for DImode 
  19510.            fixed-point constants.  A given letter can accept either or both 
  19511.            kinds of values.  It can use GET_MODE to distinguish between these 
  19512.            kinds. 
  19513.  
  19514.  EXTRA_CONSTRAINT (value, c) 
  19515.            A C expression that defines the optional machine-dependent 
  19516.            constraint letters that can be used to segregate specific types of 
  19517.            operands, usually memory references, for the target machine. 
  19518.            Normally this macro will not be defined.  If it is required for a 
  19519.            particular target machine, it should return 1 if value corresponds 
  19520.            to the operand type represented by the constraint letter c.  If c is 
  19521.            not defined as an extra constraint, the value returned should be 0 
  19522.            regardless of value. 
  19523.  
  19524.            For example, on the ROMP, load instructions cannot have their output 
  19525.            in r0 if the memory reference contains a symbolic address. 
  19526.            Constraint letter `Q' is defined as representing a memory address 
  19527.            that does not contain a symbolic address.  An alternative is 
  19528.            specified with a `Q' constraint on the input and `r' on the output. 
  19529.            The next alternative specifies `m' on the input and a register class 
  19530.            that does not include r0 on the output. 
  19531.  
  19532.  
  19533. ΓòÉΓòÉΓòÉ 21.7. Stack Layout and Calling Conventions ΓòÉΓòÉΓòÉ
  19534.  
  19535. This describes the stack layout and calling conventions. 
  19536.  
  19537.  Frame Layout 
  19538.  Frame Registers 
  19539.  Elimination 
  19540.  Stack Arguments 
  19541.  Register Arguments 
  19542.  Scalar Return 
  19543.  Aggregate Return 
  19544.  Caller Saves 
  19545.  Function Entry 
  19546.  Profiling 
  19547.  
  19548.  
  19549. ΓòÉΓòÉΓòÉ 21.7.1. Basic Stack Layout ΓòÉΓòÉΓòÉ
  19550.  
  19551. Here is the basic stack layout. 
  19552.  
  19553.  STACK_GROWS_DOWNWARD 
  19554.            Define this macro if pushing a word onto the stack moves the stack 
  19555.            pointer to a smaller address. 
  19556.  
  19557.            When we say, ``define this macro if ...,'' it means that the 
  19558.            compiler checks this macro only with #ifdef so the precise 
  19559.            definition used does not matter. 
  19560.  
  19561.  FRAME_GROWS_DOWNWARD 
  19562.            Define this macro if the addresses of local variable slots are at 
  19563.            negative offsets from the frame pointer. 
  19564.  
  19565.  ARGS_GROW_DOWNWARD 
  19566.            Define this macro if successive arguments to a function occupy 
  19567.            decreasing addresses on the stack. 
  19568.  
  19569.  STARTING_FRAME_OFFSET 
  19570.            Offset from the frame pointer to the first local variable slot to be 
  19571.            allocated. 
  19572.  
  19573.            If FRAME_GROWS_DOWNWARD, find the next slot's offset by subtracting 
  19574.            the first slot's length from STARTING_FRAME_OFFSET. Otherwise, it is 
  19575.            found by adding the length of the first slot to the value 
  19576.            STARTING_FRAME_OFFSET. 
  19577.  
  19578.  STACK_POINTER_OFFSET 
  19579.            Offset from the stack pointer register to the first location at 
  19580.            which outgoing arguments are placed.  If not specified, the default 
  19581.            value of zero is used.  This is the proper value for most machines. 
  19582.  
  19583.            If ARGS_GROW_DOWNWARD, this is the offset to the location above the 
  19584.            first location at which outgoing arguments are placed. 
  19585.  
  19586.  FIRST_PARM_OFFSET (fundecl) 
  19587.            Offset from the argument pointer register to the first argument's 
  19588.            address.  On some machines it may depend on the data type of the 
  19589.            function. 
  19590.  
  19591.            If ARGS_GROW_DOWNWARD, this is the offset to the location above the 
  19592.            first argument's address. 
  19593.  
  19594.  STACK_DYNAMIC_OFFSET (fundecl) 
  19595.            Offset from the stack pointer register to an item dynamically 
  19596.            allocated on the stack, e.g., by alloca. 
  19597.  
  19598.            The default value for this macro is STACK_POINTER_OFFSET plus the 
  19599.            length of the outgoing arguments.  The default is correct for most 
  19600.            machines.  See `function.c' for details. 
  19601.  
  19602.  DYNAMIC_CHAIN_ADDRESS (frameaddr) 
  19603.            A C expression whose value is RTL representing the address in a 
  19604.            stack frame where the pointer to the caller's frame is stored. 
  19605.            Assume that frameaddr is an RTL expression for the address of the 
  19606.            stack frame itself. 
  19607.  
  19608.            If you don't define this macro, the default is to return the value 
  19609.            of frameaddr---that is, the stack frame address is also the address 
  19610.            of the stack word that points to the previous frame. 
  19611.  
  19612.  SETUP_FRAME_ADDRESSES () 
  19613.            If defined, a C expression that produces the machine-specific code 
  19614.            to setup the stack so that arbitrary frames can be accessed.  For 
  19615.            example, on the Sparc, we must flush all of the register windows to 
  19616.            the stack before we can access arbitrary stack frames. This macro 
  19617.            will seldom need to be defined. 
  19618.  
  19619.  RETURN_ADDR_RTX (count, frameaddr) 
  19620.            A C expression whose value is RTL representing the value of the 
  19621.            return address for the frame count steps up from the current frame. 
  19622.            frameaddr is the frame pointer of the count frame, or the frame 
  19623.            pointer of the count - 1 frame if RETURN_ADDR_IN_PREVIOUS_FRAME is 
  19624.            defined. 
  19625.  
  19626.  RETURN_ADDR_IN_PREVIOUS_FRAME 
  19627.            Define this if the return address of a particular stack frame is 
  19628.            accessed from the frame pointer of the previous stack frame. 
  19629.  
  19630.  
  19631. ΓòÉΓòÉΓòÉ 21.7.2. Registers That Address the Stack Frame ΓòÉΓòÉΓòÉ
  19632.  
  19633. This discusses registers that address the stack frame. 
  19634.  
  19635.  STACK_POINTER_REGNUM 
  19636.            The register number of the stack pointer register, which must also 
  19637.            be a fixed register according to FIXED_REGISTERS.  On most machines, 
  19638.            the hardware determines which register this is. 
  19639.  
  19640.  FRAME_POINTER_REGNUM 
  19641.            The register number of the frame pointer register, which is used to 
  19642.            access automatic variables in the stack frame.  On some machines, 
  19643.            the hardware determines which register this is.  On other machines, 
  19644.            you can choose any register you wish for this purpose. 
  19645.  
  19646.  HARD_FRAME_POINTER_REGNUM 
  19647.            On some machines the offset between the frame pointer and starting 
  19648.            offset of the automatic variables is not known until after register 
  19649.            allocation has been done (for example, because the saved registers 
  19650.            are between these two locations).  On those machines, define 
  19651.            FRAME_POINTER_REGNUM the number of a special, fixed register to be 
  19652.            used internally until the offset is known, and define 
  19653.            HARD_FRAME_POINTER_REGNUM to be actual the hard register number used 
  19654.            for the frame pointer. 
  19655.  
  19656.            You should define this macro only in the very rare circumstances 
  19657.            when it is not possible to calculate the offset between the frame 
  19658.            pointer and the automatic variables until after register allocation 
  19659.            has been completed.  When this macro is defined, you must also 
  19660.            indicate in your definition of ELIMINABLE_REGS how to eliminate 
  19661.            FRAME_POINTER_REGNUM into either HARD_FRAME_POINTER_REGNUM or 
  19662.            STACK_POINTER_REGNUM. 
  19663.  
  19664.            Do not define this macro if it would be the same as 
  19665.            FRAME_POINTER_REGNUM. 
  19666.  
  19667.  ARG_POINTER_REGNUM 
  19668.            The register number of the arg pointer register, which is used to 
  19669.            access the function's argument list.  On some machines, this is the 
  19670.            same as the frame pointer register.  On some machines, the hardware 
  19671.            determines which register this is.  On other machines, you can 
  19672.            choose any register you wish for this purpose.  If this is not the 
  19673.            same register as the frame pointer register, then you must mark it 
  19674.            as a fixed register according to FIXED_REGISTERS, or arrange to be 
  19675.            able to eliminate it (see Elimination). 
  19676.  
  19677.  STATIC_CHAIN_REGNUM 
  19678.  STATIC_CHAIN_INCOMING_REGNUM 
  19679.            Register numbers used for passing a function's static chain pointer. 
  19680.            If register windows are used, the register number as seen by the 
  19681.            called function is STATIC_CHAIN_INCOMING_REGNUM, while the register 
  19682.            number as seen by the calling function is STATIC_CHAIN_REGNUM.  If 
  19683.            these registers are the same, STATIC_CHAIN_INCOMING_REGNUM need not 
  19684.            be defined. 
  19685.  
  19686.            The static chain register need not be a fixed register. 
  19687.  
  19688.            If the static chain is passed in memory, these macros should not be 
  19689.            defined; instead, the next two macros should be defined. 
  19690.  
  19691.  STATIC_CHAIN 
  19692.  STATIC_CHAIN_INCOMING 
  19693.            If the static chain is passed in memory, these macros provide rtx 
  19694.            giving mem expressions that denote where they are stored. 
  19695.            STATIC_CHAIN and STATIC_CHAIN_INCOMING give the locations as seen by 
  19696.            the calling and called functions, respectively.  Often the former 
  19697.            will be at an offset from the stack pointer and the latter at an 
  19698.            offset from the frame pointer. 
  19699.  
  19700.            The variables stack_pointer_rtx, frame_pointer_rtx, and 
  19701.            arg_pointer_rtx will have been initialized prior to the use of these 
  19702.            macros and should be used to refer to those items. 
  19703.  
  19704.            If the static chain is passed in a register, the two previous macros 
  19705.            should be defined instead. 
  19706.  
  19707.  
  19708. ΓòÉΓòÉΓòÉ 21.7.3. Eliminating Frame Pointer and Arg Pointer ΓòÉΓòÉΓòÉ
  19709.  
  19710. This is about eliminating the frame pointer and arg pointer. 
  19711.  
  19712.  FRAME_POINTER_REQUIRED 
  19713.            A C expression which is nonzero if a function must have and use a 
  19714.            frame pointer.  This expression is evaluated  in the reload pass. 
  19715.            If its value is nonzero the function will have a frame pointer. 
  19716.  
  19717.            The expression can in principle examine the current function and 
  19718.            decide according to the facts, but on most machines the constant 0 
  19719.            or the constant 1 suffices.  Use 0 when the machine allows code to 
  19720.            be generated with no frame pointer, and doing so saves some time or 
  19721.            space.  Use 1 when there is no possible advantage to avoiding a 
  19722.            frame pointer. 
  19723.  
  19724.            In certain cases, the compiler does not know how to produce valid 
  19725.            code without a frame pointer.  The compiler recognizes those cases 
  19726.            and automatically gives the function a frame pointer regardless of 
  19727.            what FRAME_POINTER_REQUIRED says.  You don't need to worry about 
  19728.            them. 
  19729.  
  19730.            In a function that does not require a frame pointer, the frame 
  19731.            pointer register can be allocated for ordinary usage, unless you 
  19732.            mark it as a fixed register.  See FIXED_REGISTERS for more 
  19733.            information. 
  19734.  
  19735.  INITIAL_FRAME_POINTER_OFFSET (depth-var) 
  19736.            A C statement to store in the variable depth-var the difference 
  19737.            between the frame pointer and the stack pointer values immediately 
  19738.            after the function prologue.  The value would be computed from 
  19739.            information such as the result of get_frame_size () and the tables 
  19740.            of registers regs_ever_live and call_used_regs. 
  19741.  
  19742.            If ELIMINABLE_REGS is defined, this macro will be not be used and 
  19743.            need not be defined.  Otherwise, it must be defined even if 
  19744.            FRAME_POINTER_REQUIRED is defined to always be true; in that case, 
  19745.            you may set depth-var to anything. 
  19746.  
  19747.  ELIMINABLE_REGS 
  19748.            If defined, this macro specifies a table of register pairs used to 
  19749.            eliminate unneeded registers that point into the stack frame.  If it 
  19750.            is not defined, the only elimination attempted by the compiler is to 
  19751.            replace references to the frame pointer with references to the stack 
  19752.            pointer. 
  19753.  
  19754.            The definition of this macro is a list of structure initializations, 
  19755.            each of which specifies an original and replacement register. 
  19756.  
  19757.            On some machines, the position of the argument pointer is not known 
  19758.            until the compilation is completed.  In such a case, a separate hard 
  19759.            register must be used for the argument pointer.  This register can 
  19760.            be eliminated by replacing it with either the frame pointer or the 
  19761.            argument pointer, depending on whether or not the frame pointer has 
  19762.            been eliminated. 
  19763.  
  19764.            In this case, you might specify: 
  19765.  
  19766.                       #define ELIMINABLE_REGS  \
  19767.                       {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
  19768.                        {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
  19769.                        {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
  19770.  
  19771.            Note that the elimination of the argument pointer with the stack 
  19772.            pointer is specified first since that is the preferred elimination. 
  19773.  
  19774.  CAN_ELIMINATE (from-reg, to-reg) 
  19775.            A C expression that returns non-zero if the compiler is allowed to 
  19776.            try to replace register number from-reg with register number to-reg. 
  19777.            This macro need only be defined if ELIMINABLE_REGS is defined, and 
  19778.            will usually be the constant 1, since most of the cases preventing 
  19779.            register elimination are things that the compiler already knows 
  19780.            about. 
  19781.  
  19782.  INITIAL_ELIMINATION_OFFSET (from-reg, to-reg, offset-var) 
  19783.            This macro is similar to INITIAL_FRAME_POINTER_OFFSET.  It specifies 
  19784.            the initial difference between the specified pair of registers. 
  19785.            This macro must be defined if ELIMINABLE_REGS is defined. 
  19786.  
  19787.  LONGJMP_RESTORE_FROM_STACK 
  19788.            Define this macro if the longjmp function restores registers from 
  19789.            the stack frames, rather than from those saved specifically by 
  19790.            setjmp.  Certain quantities must not be kept in registers across a 
  19791.            call to setjmp on such machines. 
  19792.  
  19793.  
  19794. ΓòÉΓòÉΓòÉ 21.7.4. Passing Function Arguments on the Stack ΓòÉΓòÉΓòÉ
  19795.  
  19796. The macros in this section control how arguments are passed on the stack.  See 
  19797. the following section for other macros that control passing certain arguments 
  19798. in registers. 
  19799.  
  19800.  PROMOTE_PROTOTYPES 
  19801.            Define this macro if an argument declared in a prototype as an 
  19802.            integral type smaller than int should actually be passed as an int. 
  19803.            In addition to avoiding errors in certain cases of mismatch, it also 
  19804.            makes for better code on certain machines. 
  19805.  
  19806.  PUSH_ROUNDING (npushed) 
  19807.            A C expression that is the number of bytes actually pushed onto the 
  19808.            stack when an instruction attempts to push npushed bytes. 
  19809.  
  19810.            If the target machine does not have a push instruction, do not 
  19811.            define this macro.  That directs GNU CC to use an alternate 
  19812.            strategy: to allocate the entire argument block and then store the 
  19813.            arguments into it. 
  19814.  
  19815.            On some machines, the definition 
  19816.  
  19817.                       #define PUSH_ROUNDING(BYTES) (BYTES)
  19818.  
  19819.            will suffice.  But on other machines, instructions that appear to 
  19820.            push one byte actually push two bytes in an attempt to maintain 
  19821.            alignment.  Then the definition should be 
  19822.  
  19823.                       #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
  19824.  
  19825.  ACCUMULATE_OUTGOING_ARGS 
  19826.            If defined, the maximum amount of space required for outgoing 
  19827.            arguments will be computed and placed into the variable 
  19828.            current_function_outgoing_args_size.  No space will be pushed onto 
  19829.            the stack for each call; instead, the function prologue should 
  19830.            increase the stack frame size by this amount. 
  19831.  
  19832.            Defining both PUSH_ROUNDING and ACCUMULATE_OUTGOING_ARGS is not 
  19833.            proper. 
  19834.  
  19835.  REG_PARM_STACK_SPACE (fndecl) 
  19836.            Define this macro if functions should assume that stack space has 
  19837.            been allocated for arguments even when their values are passed in 
  19838.            registers. 
  19839.  
  19840.            The value of this macro is the size, in bytes, of the area reserved 
  19841.            for arguments passed in registers for the function represented by 
  19842.            fndecl. 
  19843.  
  19844.            This space can be allocated by the caller, or be a part of the 
  19845.            machine-dependent stack frame: OUTGOING_REG_PARM_STACK_SPACE says 
  19846.            which. 
  19847.  
  19848.  MAYBE_REG_PARM_STACK_SPACE 
  19849.  FINAL_REG_PARM_STACK_SPACE (const_size, var_size) 
  19850.            Define these macros in addition to the one above if functions might 
  19851.            allocate stack space for arguments even when their values are passed 
  19852.            in registers.  These should be used when the stack space allocated 
  19853.            for arguments in registers is not a simple constant independent of 
  19854.            the function declaration. 
  19855.  
  19856.            The value of the first macro is the size, in bytes, of the area that 
  19857.            we should initially assume would be reserved for arguments passed in 
  19858.            registers. 
  19859.  
  19860.            The value of the second macro is the actual size, in bytes, of the 
  19861.            area that will be reserved for arguments passed in registers.  This 
  19862.            takes two arguments: an integer representing the number of bytes of 
  19863.            fixed sized arguments on the stack, and a tree representing the 
  19864.            number of bytes of variable sized arguments on the stack. 
  19865.  
  19866.            When these macros are defined, REG_PARM_STACK_SPACE will only be 
  19867.            called for libcall functions, the current function, or for a 
  19868.            function being called when it is known that such stack space must be 
  19869.            allocated. In each case this value can be easily computed. 
  19870.  
  19871.            When deciding whether a called function needs such stack space, and 
  19872.            how much space to reserve, GNU CC uses these two macros instead of 
  19873.            REG_PARM_STACK_SPACE. 
  19874.  
  19875.  OUTGOING_REG_PARM_STACK_SPACE 
  19876.            Define this if it is the responsibility of the caller to allocate 
  19877.            the area reserved for arguments passed in registers. 
  19878.  
  19879.            If ACCUMULATE_OUTGOING_ARGS is defined, this macro controls whether 
  19880.            the space for these arguments counts in the value of 
  19881.            current_function_outgoing_args_size. 
  19882.  
  19883.  STACK_PARMS_IN_REG_PARM_AREA 
  19884.            Define this macro if REG_PARM_STACK_SPACE is defined, but the stack 
  19885.            parameters don't skip the area specified by it. 
  19886.  
  19887.            Normally, when a parameter is not passed in registers, it is placed 
  19888.            on the stack beyond the REG_PARM_STACK_SPACE area.  Defining this 
  19889.            macro suppresses this behavior and causes the parameter to be passed 
  19890.            on the stack in its natural location. 
  19891.  
  19892.  RETURN_POPS_ARGS (fundecl, funtype, stack-size) 
  19893.            A C expression that should indicate the number of bytes of its own 
  19894.            arguments that a function pops on returning, or 0 if the function 
  19895.            pops no arguments and the caller must therefore pop them all after 
  19896.            the function returns. 
  19897.  
  19898.            fundecl is a C variable whose value is a tree node that describes 
  19899.            the function in question.  Normally it is a node of type 
  19900.            FUNCTION_DECL that describes the declaration of the function. From 
  19901.            this it is possible to obtain the DECL_MACHINE_ATTRIBUTES of the 
  19902.            function. 
  19903.  
  19904.            funtype is a C variable whose value is a tree node that describes 
  19905.            the function in question.  Normally it is a node of type 
  19906.            FUNCTION_TYPE that describes the data type of the function. From 
  19907.            this it is possible to obtain the data types of the value and 
  19908.            arguments (if known). 
  19909.  
  19910.            When a call to a library function is being considered, funtype will 
  19911.            contain an identifier node for the library function.  Thus, if you 
  19912.            need to distinguish among various library functions, you can do so 
  19913.            by their names.  Note that ``library function'' in this context 
  19914.            means a function used to perform arithmetic, whose name is known 
  19915.            specially in the compiler and was not mentioned in the C code being 
  19916.            compiled. 
  19917.  
  19918.            stack-size is the number of bytes of arguments passed on the stack. 
  19919.            If a variable number of bytes is passed, it is zero, and argument 
  19920.            popping will always be the responsibility of the calling function. 
  19921.  
  19922.            On the Vax, all functions always pop their arguments, so the 
  19923.            definition of this macro is stack-size.  On the 68000, using the 
  19924.            standard calling convention, no functions pop their arguments, so 
  19925.            the value of the macro is always 0 in this case.  But an alternative 
  19926.            calling convention is available in which functions that take a fixed 
  19927.            number of arguments pop them but other functions (such as printf) 
  19928.            pop nothing (the caller pops all).  When this convention is in use, 
  19929.            funtype is examined to determine whether a function takes a fixed 
  19930.            number of arguments. 
  19931.  
  19932.  
  19933. ΓòÉΓòÉΓòÉ 21.7.5. Passing Arguments in Registers ΓòÉΓòÉΓòÉ
  19934.  
  19935. This section describes the macros which let you control how various types of 
  19936. arguments are passed in registers or how they are arranged in the stack. 
  19937.  
  19938.  FUNCTION_ARG (cum, mode, type, named) 
  19939.            A C expression that controls whether a function argument is passed 
  19940.            in a register, and which register. 
  19941.  
  19942.            The arguments are cum, which summarizes all the previous arguments; 
  19943.            mode, the machine mode of the argument; type, the data type of the 
  19944.            argument as a tree node or 0 if that is not known (which happens for 
  19945.            C support library functions); and named, which is 1 for an ordinary 
  19946.            argument and 0 for nameless arguments that correspond to `...' in 
  19947.            the called function's prototype. 
  19948.  
  19949.            The value of the expression should either be a reg RTX for the hard 
  19950.            register in which to pass the argument, or zero to pass the argument 
  19951.            on the stack. 
  19952.  
  19953.            For machines like the Vax and 68000, where normally all arguments 
  19954.            are pushed, zero suffices as a definition. 
  19955.  
  19956.            The usual way to make the ANSI library `stdarg.h' work on a machine 
  19957.            where some arguments are usually passed in registers, is to cause 
  19958.            nameless arguments to be passed on the stack instead.  This is done 
  19959.            by making FUNCTION_ARG return 0 whenever named is 0. 
  19960.  
  19961.            You may use the macro MUST_PASS_IN_STACK (mode, type) in the 
  19962.            definition of this macro to determine if this argument is of a type 
  19963.            that must be passed in the stack.  If REG_PARM_STACK_SPACE is not 
  19964.            defined and FUNCTION_ARG returns non-zero for such an argument, the 
  19965.            compiler will abort.  If REG_PARM_STACK_SPACE is defined, the 
  19966.            argument will be computed in the stack and then loaded into a 
  19967.            register. 
  19968.  
  19969.  FUNCTION_INCOMING_ARG (cum, mode, type, named) 
  19970.            Define this macro if the target machine has ``register windows'', so 
  19971.            that the register in which a function sees an arguments is not 
  19972.            necessarily the same as the one in which the caller passed the 
  19973.            argument. 
  19974.  
  19975.            For such machines, FUNCTION_ARG computes the register in which the 
  19976.            caller passes the value, and FUNCTION_INCOMING_ARG should be defined 
  19977.            in a similar fashion to tell the function being called where the 
  19978.            arguments will arrive. 
  19979.  
  19980.            If FUNCTION_INCOMING_ARG is not defined, FUNCTION_ARG serves both 
  19981.            purposes. 
  19982.  
  19983.  FUNCTION_ARG_PARTIAL_NREGS (cum, mode, type, named) 
  19984.            A C expression for the number of words, at the beginning of an 
  19985.            argument, must be put in registers.  The value must be zero for 
  19986.            arguments that are passed entirely in registers or that are entirely 
  19987.            pushed on the stack. 
  19988.  
  19989.            On some machines, certain arguments must be passed partially in 
  19990.            registers and partially in memory.  On these machines, typically the 
  19991.            first n words of arguments are passed in registers, and the rest on 
  19992.            the stack.  If a multi-word argument (a double or a structure) 
  19993.            crosses that boundary, its first few words must be passed in 
  19994.            registers and the rest must be pushed.  This macro tells the 
  19995.            compiler when this occurs, and how many of the words should go in 
  19996.            registers. 
  19997.  
  19998.            FUNCTION_ARG for these arguments should return the first register to 
  19999.            be used by the caller for this argument; likewise 
  20000.            FUNCTION_INCOMING_ARG, for the called function. 
  20001.  
  20002.  FUNCTION_ARG_PASS_BY_REFERENCE (cum, mode, type, named) 
  20003.            A C expression that indicates when an argument must be passed by 
  20004.            reference. If nonzero for an argument, a copy of that argument is 
  20005.            made in memory and a pointer to the argument is passed instead of 
  20006.            the argument itself. The pointer is passed in whatever way is 
  20007.            appropriate for passing a pointer to that type. 
  20008.  
  20009.            On machines where REG_PARM_STACK_SPACE is not defined, a suitable 
  20010.            definition of this macro might be 
  20011.  
  20012.                       #define FUNCTION_ARG_PASS_BY_REFERENCE\
  20013.                       (CUM, MODE, TYPE, NAMED)  \
  20014.                         MUST_PASS_IN_STACK (MODE, TYPE)
  20015.  
  20016.  FUNCTION_ARG_CALLEE_COPIES (cum, mode, type, named) 
  20017.            If defined, a C expression that indicates when it is the called 
  20018.            function's responsibility to make a copy of arguments passed by 
  20019.            invisible reference. Normally, the caller makes a copy and passes 
  20020.            the address of the copy to the routine being called.  When 
  20021.            FUNCTION_ARG_CALLEE_COPIES is defined and is nonzero, the caller 
  20022.            does not make a copy.  Instead, it passes a pointer to the ``live'' 
  20023.            value.  The called function must not modify this value.  If it can 
  20024.            be determined that the value won't be modified, it need not make a 
  20025.            copy; otherwise a copy must be made. 
  20026.  
  20027.  CUMULATIVE_ARGS 
  20028.            A C type for declaring a variable that is used as the first argument 
  20029.            of FUNCTION_ARG and other related values.  For some target machines, 
  20030.            the type int suffices and can hold the number of bytes of argument 
  20031.            so far. 
  20032.  
  20033.            There is no need to record in CUMULATIVE_ARGS anything about the 
  20034.            arguments that have been passed on the stack.  The compiler has 
  20035.            other variables to keep track of that.  For target machines on which 
  20036.            all arguments are passed on the stack, there is no need to store 
  20037.            anything in CUMULATIVE_ARGS; however, the data structure must exist 
  20038.            and should not be empty, so use int. 
  20039.  
  20040.  INIT_CUMULATIVE_ARGS (cum, fntype, libname) 
  20041.            A C statement (sans semicolon) for initializing the variable cum for 
  20042.            the state at the beginning of the argument list.  The variable has 
  20043.            type CUMULATIVE_ARGS.  The value of fntype is the tree node for the 
  20044.            data type of the function which will receive the args, or 0 if the 
  20045.            args are to a compiler support library function. 
  20046.  
  20047.            When processing a call to a compiler support library function, 
  20048.            libname identifies which one.  It is a symbol_ref rtx which contains 
  20049.            the name of the function, as a string.  libname is 0 when an 
  20050.            ordinary C function call is being processed.  Thus, each time this 
  20051.            macro is called, either libname or fntype is nonzero, but never both 
  20052.            of them at once. 
  20053.  
  20054.  INIT_CUMULATIVE_INCOMING_ARGS (cum, fntype, libname) 
  20055.            Like INIT_CUMULATIVE_ARGS but overrides it for the purposes of 
  20056.            finding the arguments for the function being compiled.  If this 
  20057.            macro is undefined, INIT_CUMULATIVE_ARGS is used instead. 
  20058.  
  20059.            The value passed for libname is always 0, since library routines 
  20060.            with special calling conventions are never compiled with GNU CC. 
  20061.            The argument libname exists for symmetry with INIT_CUMULATIVE_ARGS. 
  20062.  
  20063.  FUNCTION_ARG_ADVANCE (cum, mode, type, named) 
  20064.            A C statement (sans semicolon) to update the summarizer variable cum 
  20065.            to advance past an argument in the argument list.  The values mode, 
  20066.            type and named describe that argument. Once this is done, the 
  20067.            variable cum is suitable for analyzing the following argument with 
  20068.            FUNCTION_ARG, etc. 
  20069.  
  20070.            This macro need not do anything if the argument in question was 
  20071.            passed on the stack.  The compiler knows how to track the amount of 
  20072.            stack space used for arguments without any special help. 
  20073.  
  20074.  FUNCTION_ARG_PADDING (mode, type) 
  20075.            If defined, a C expression which determines whether, and in which 
  20076.            direction, to pad out an argument with extra space.  The value 
  20077.            should be of type enum direction: either upward to pad above the 
  20078.            argument, downward to pad below, or none to inhibit padding. 
  20079.  
  20080.            The amount of padding is always just enough to reach the next 
  20081.            multiple of FUNCTION_ARG_BOUNDARY; this macro does not control it. 
  20082.  
  20083.            This macro has a default definition which is right for most systems. 
  20084.            For little-endian machines, the default is to pad upward.  For 
  20085.            big-endian machines, the default is to pad downward for an argument 
  20086.            of constant size shorter than an int, and upward otherwise. 
  20087.  
  20088.  FUNCTION_ARG_BOUNDARY (mode, type) 
  20089.            If defined, a C expression that gives the alignment boundary, in 
  20090.            bits, of an argument with the specified mode and type.  If it is not 
  20091.            defined, PARM_BOUNDARY is used for all arguments. 
  20092.  
  20093.  FUNCTION_ARG_REGNO_P (regno) 
  20094.            A C expression that is nonzero if regno is the number of a hard 
  20095.            register in which function arguments are sometimes passed.  This 
  20096.            does not include implicit arguments such as the static chain and the 
  20097.            structure-value address.  On many machines, no registers can be used 
  20098.            for this purpose since all function arguments are pushed on the 
  20099.            stack. 
  20100.  
  20101.  
  20102. ΓòÉΓòÉΓòÉ 21.7.6. How Scalar Function Values Are Returned ΓòÉΓòÉΓòÉ
  20103.  
  20104. This section discusses the macros that control returning scalars as 
  20105. values---values that can fit in registers. 
  20106.  
  20107.  TRADITIONAL_RETURN_FLOAT 
  20108.            Define this macro if `-traditional' should not cause functions 
  20109.            declared to return float to convert the value to double. 
  20110.  
  20111.  FUNCTION_VALUE (valtype, func) 
  20112.            A C expression to create an RTX representing the place where a 
  20113.            function returns a value of data type valtype.  valtype is a tree 
  20114.            node representing a data type.  Write TYPE_MODE (valtype) to get the 
  20115.            machine mode used to represent that type. On many machines, only the 
  20116.            mode is relevant.  (Actually, on most machines, scalar values are 
  20117.            returned in the same place regardless of mode). 
  20118.  
  20119.            If PROMOTE_FUNCTION_RETURN is defined, you must apply the same 
  20120.            promotion rules specified in PROMOTE_MODE if valtype is a scalar 
  20121.            type. 
  20122.  
  20123.            If the precise function being called is known, func is a tree node 
  20124.            (FUNCTION_DECL) for it; otherwise, func is a null pointer.  This 
  20125.            makes it possible to use a different value-returning convention for 
  20126.            specific functions when all their calls are known. 
  20127.  
  20128.            FUNCTION_VALUE is not used for return vales with aggregate data 
  20129.            types, because these are returned in another way.  See 
  20130.            STRUCT_VALUE_REGNUM and related macros, below. 
  20131.  
  20132.  FUNCTION_OUTGOING_VALUE (valtype, func) 
  20133.            Define this macro if the target machine has ``register windows'' so 
  20134.            that the register in which a function returns its value is not the 
  20135.            same as the one in which the caller sees the value. 
  20136.  
  20137.            For such machines, FUNCTION_VALUE computes the register in which the 
  20138.            caller will see the value.  FUNCTION_OUTGOING_VALUE should be 
  20139.            defined in a similar fashion to tell the function where to put the 
  20140.            value. 
  20141.  
  20142.            If FUNCTION_OUTGOING_VALUE is not defined, FUNCTION_VALUE serves 
  20143.            both purposes. 
  20144.  
  20145.            FUNCTION_OUTGOING_VALUE is not used for return vales with aggregate 
  20146.            data types, because these are returned in another way.  See 
  20147.            STRUCT_VALUE_REGNUM and related macros, below. 
  20148.  
  20149.  LIBCALL_VALUE (mode) 
  20150.            A C expression to create an RTX representing the place where a 
  20151.            library function returns a value of mode mode.  If the precise 
  20152.            function being called is known, func is a tree node (FUNCTION_DECL) 
  20153.            for it; otherwise, func is a null pointer.  This makes it possible 
  20154.            to use a different value-returning convention for specific functions 
  20155.            when all their calls are known. 
  20156.  
  20157.            Note that ``library function'' in this context means a compiler 
  20158.            support routine, used to perform arithmetic, whose name is known 
  20159.            specially by the compiler and was not mentioned in the C code being 
  20160.            compiled. 
  20161.  
  20162.            The definition of LIBRARY_VALUE need not be concerned aggregate data 
  20163.            types, because none of the library functions returns such types. 
  20164.  
  20165.  FUNCTION_VALUE_REGNO_P (regno) 
  20166.            A C expression that is nonzero if regno is the number of a hard 
  20167.            register in which the values of called function may come back. 
  20168.  
  20169.            A register whose use for returning values is limited to serving as 
  20170.            the second of a pair (for a value of type double, say) need not be 
  20171.            recognized by this macro.  So for most machines, this definition 
  20172.            suffices: 
  20173.  
  20174.                       #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
  20175.  
  20176.            If the machine has register windows, so that the caller and the 
  20177.            called function use different registers for the return value, this 
  20178.            macro should recognize only the caller's register numbers. 
  20179.  
  20180.  APPLY_RESULT_SIZE 
  20181.            Define this macro if `untyped_call' and `untyped_return' need more 
  20182.            space than is implied by FUNCTION_VALUE_REGNO_P for saving and 
  20183.            restoring an arbitrary return value. 
  20184.  
  20185.  
  20186. ΓòÉΓòÉΓòÉ 21.7.7. How Large Values Are Returned ΓòÉΓòÉΓòÉ
  20187.  
  20188. When a function value's mode is BLKmode (and in some other cases), the value is 
  20189. not returned according to FUNCTION_VALUE (see Scalar Return).  Instead, the 
  20190. caller passes the address of a block of memory in which the value should be 
  20191. stored.  This address is called the structure value address. 
  20192.  
  20193. This section describes how to control returning structure values in memory. 
  20194.  
  20195.  RETURN_IN_MEMORY (type) 
  20196.            A C expression which can inhibit the returning of certain function 
  20197.            values in registers, based on the type of value.  A nonzero value 
  20198.            says to return the function value in memory, just as large 
  20199.            structures are always returned.  Here type will be a C expression of 
  20200.            type tree, representing the data type of the value. 
  20201.  
  20202.            Note that values of mode BLKmode must be explicitly handled by this 
  20203.            macro.  Also, the option `-fpcc-struct-return' takes effect 
  20204.            regardless of this macro.  On most systems, it is possible to leave 
  20205.            the macro undefined; this causes a default definition to be used, 
  20206.            whose value is the constant 1 for BLKmode values, and 0 otherwise. 
  20207.  
  20208.            Do not use this macro to indicate that structures and unions should 
  20209.            always be returned in memory.  You should instead use 
  20210.            DEFAULT_PCC_STRUCT_RETURN to indicate this. 
  20211.  
  20212.  DEFAULT_PCC_STRUCT_RETURN 
  20213.            Define this macro to be 1 if all structure and union return values 
  20214.            must be in memory.  Since this results in slower code, this should 
  20215.            be defined only if needed for compatibility with other compilers or 
  20216.            with an ABI. If you define this macro to be 0, then the conventions 
  20217.            used for structure and union return values are decided by the 
  20218.            RETURN_IN_MEMORY macro. 
  20219.  
  20220.            If not defined, this defaults to the value 1. 
  20221.  
  20222.  STRUCT_VALUE_REGNUM 
  20223.            If the structure value address is passed in a register, then 
  20224.            STRUCT_VALUE_REGNUM should be the number of that register. 
  20225.  
  20226.  STRUCT_VALUE 
  20227.            If the structure value address is not passed in a register, define 
  20228.            STRUCT_VALUE as an expression returning an RTX for the place where 
  20229.            the address is passed.  If it returns 0, the address is passed as an 
  20230.            ``invisible'' first argument. 
  20231.  
  20232.  STRUCT_VALUE_INCOMING_REGNUM 
  20233.            On some architectures the place where the structure value address is 
  20234.            found by the called function is not the same place that the caller 
  20235.            put it.  This can be due to register windows, or it could be because 
  20236.            the function prologue moves it to a different place. 
  20237.  
  20238.            If the incoming location of the structure value address is in a 
  20239.            register, define this macro as the register number. 
  20240.  
  20241.  STRUCT_VALUE_INCOMING 
  20242.            If the incoming location is not a register, then you should define 
  20243.            STRUCT_VALUE_INCOMING as an expression for an RTX for where the 
  20244.            called function should find the value.  If it should find the value 
  20245.            on the stack, define this to create a mem which refers to the frame 
  20246.            pointer.  A definition of 0 means that the address is passed as an 
  20247.            ``invisible'' first argument. 
  20248.  
  20249.  PCC_STATIC_STRUCT_RETURN 
  20250.            Define this macro if the usual system convention on the target 
  20251.            machine for returning structures and unions is for the called 
  20252.            function to return the address of a static variable containing the 
  20253.            value. 
  20254.  
  20255.            Do not define this if the usual system convention is for the caller 
  20256.            to pass an address to the subroutine. 
  20257.  
  20258.            This macro has effect in `-fpcc-struct-return' mode, but it does 
  20259.            nothing when you use `-freg-struct-return' mode. 
  20260.  
  20261.  
  20262. ΓòÉΓòÉΓòÉ 21.7.8. Caller-Saves Register Allocation ΓòÉΓòÉΓòÉ
  20263.  
  20264. If you enable it, GNU CC can save registers around function calls.  This makes 
  20265. it possible to use call-clobbered registers to hold variables that must live 
  20266. across calls. 
  20267.  
  20268.  DEFAULT_CALLER_SAVES 
  20269.            Define this macro if function calls on the target machine do not 
  20270.            preserve any registers; in other words, if CALL_USED_REGISTERS has 1 
  20271.            for all registers.  This macro enables `-fcaller-saves' by default. 
  20272.            Eventually that option will be enabled by default on all machines 
  20273.            and both the option and this macro will be eliminated. 
  20274.  
  20275.  CALLER_SAVE_PROFITABLE (refs, calls) 
  20276.            A C expression to determine whether it is worthwhile to consider 
  20277.            placing a pseudo-register in a call-clobbered hard register and 
  20278.            saving and restoring it around each function call.  The expression 
  20279.            should be 1 when this is worth doing, and 0 otherwise. 
  20280.  
  20281.            If you don't define this macro, a default is used which is good on 
  20282.            most machines: 4 * calls < refs. 
  20283.  
  20284.  
  20285. ΓòÉΓòÉΓòÉ 21.7.9. Function Entry and Exit ΓòÉΓòÉΓòÉ
  20286.  
  20287. This section describes the macros that output function entry (prologue) and 
  20288. exit (epilogue) code. 
  20289.  
  20290.  FUNCTION_PROLOGUE (file, size) 
  20291.            A C compound statement that outputs the assembler code for entry to 
  20292.            a function.  The prologue is responsible for setting up the stack 
  20293.            frame, initializing the frame pointer register, saving registers 
  20294.            that must be saved, and allocating size additional bytes of storage 
  20295.            for the local variables.  size is an integer.  file is a stdio 
  20296.            stream to which the assembler code should be output. 
  20297.  
  20298.            The label for the beginning of the function need not be output by 
  20299.            this macro.  That has already been done when the macro is run. 
  20300.  
  20301.            To determine which registers to save, the macro can refer to the 
  20302.            array regs_ever_live: element r is nonzero if hard register r is 
  20303.            used anywhere within the function.  This implies the function 
  20304.            prologue should save register r, provided it is not one of the 
  20305.            call-used registers.  (FUNCTION_EPILOGUE must likewise use 
  20306.            regs_ever_live.) 
  20307.  
  20308.            On machines that have ``register windows'', the function entry code 
  20309.            does not save on the stack the registers that are in the windows, 
  20310.            even if they are supposed to be preserved by function calls; instead 
  20311.            it takes appropriate steps to ``push'' the register stack, if any 
  20312.            non-call-used registers are used in the function. 
  20313.  
  20314.            On machines where functions may or may not have frame-pointers, the 
  20315.            function entry code must vary accordingly; it must set up the frame 
  20316.            pointer if one is wanted, and not otherwise.  To determine whether a 
  20317.            frame pointer is in wanted, the macro can refer to the variable 
  20318.            frame_pointer_needed.  The variable's value will be 1 at run time in 
  20319.            a function that needs a frame pointer.  See Elimination. 
  20320.  
  20321.            The function entry code is responsible for allocating any stack 
  20322.            space required for the function.  This stack space consists of the 
  20323.            regions listed below.  In most cases, these regions are allocated in 
  20324.            the order listed, with the last listed region closest to the top of 
  20325.            the stack (the lowest address if STACK_GROWS_DOWNWARD is defined, 
  20326.            and the highest address if it is not defined).  You can use a 
  20327.            different order for a machine if doing so is more convenient or 
  20328.            required for compatibility reasons.  Except in cases where required 
  20329.            by standard or by a debugger, there is no reason why the stack 
  20330.            layout used by GCC need agree with that used by other compilers for 
  20331.            a machine. 
  20332.  
  20333.                A region of current_function_pretend_args_size bytes of 
  20334.                 uninitialized space just underneath the first argument arriving 
  20335.                 on the stack.  (This may not be at the very start of the 
  20336.                 allocated stack region if the calling sequence has pushed 
  20337.                 anything else since pushing the stack arguments.  But usually, 
  20338.                 on such machines, nothing else has been pushed yet, because the 
  20339.                 function prologue itself does all the pushing.)  This region is 
  20340.                 used on machines where an argument may be passed partly in 
  20341.                 registers and partly in memory, and, in some cases to support 
  20342.                 the features in `varargs.h' and `stdargs.h'. 
  20343.  
  20344.                An area of memory used to save certain registers used by the 
  20345.                 function. The size of this area, which may also include space 
  20346.                 for such things as the return address and pointers to previous 
  20347.                 stack frames, is machine-specific and usually depends on which 
  20348.                 registers have been used in the function.  Machines with 
  20349.                 register windows often do not require a save area. 
  20350.  
  20351.                A region of at least size bytes, possibly rounded up to an 
  20352.                 allocation boundary, to contain the local variables of the 
  20353.                 function.  On some machines, this region and the save area may 
  20354.                 occur in the opposite order, with the save area closer to the 
  20355.                 top of the stack. 
  20356.  
  20357.                Optionally, when ACCUMULATE_OUTGOING_ARGS is defined, a region 
  20358.                 of current_function_outgoing_args_size bytes to be used for 
  20359.                 outgoing argument lists of the function.  See Stack Arguments. 
  20360.  
  20361.            Normally, it is necessary for the macros FUNCTION_PROLOGUE and 
  20362.            FUNCTION_EPILOGUE to treat leaf functions specially.  The C variable 
  20363.            leaf_function is nonzero for such a function. 
  20364.  
  20365.  EXIT_IGNORE_STACK 
  20366.            Define this macro as a C expression that is nonzero if the return 
  20367.            instruction or the function epilogue ignores the value of the stack 
  20368.            pointer; in other words, if it is safe to delete an instruction to 
  20369.            adjust the stack pointer before a return from the function. 
  20370.  
  20371.            Note that this macro's value is relevant only for functions for 
  20372.            which frame pointers are maintained.  It is never safe to delete a 
  20373.            final stack adjustment in a function that has no frame pointer, and 
  20374.            the compiler knows this regardless of EXIT_IGNORE_STACK. 
  20375.  
  20376.  FUNCTION_EPILOGUE (file, size) 
  20377.            A C compound statement that outputs the assembler code for exit from 
  20378.            a function.  The epilogue is responsible for restoring the saved 
  20379.            registers and stack pointer to their values when the function was 
  20380.            called, and returning control to the caller.  This macro takes the 
  20381.            same arguments as the macro FUNCTION_PROLOGUE, and the registers to 
  20382.            restore are determined from regs_ever_live and CALL_USED_REGISTERS 
  20383.            in the same way. 
  20384.  
  20385.            On some machines, there is a single instruction that does all the 
  20386.            work of returning from the function.  On these machines, give that 
  20387.            instruction the name `return' and do not define the macro 
  20388.            FUNCTION_EPILOGUE at all. 
  20389.  
  20390.            Do not define a pattern named `return' if you want the 
  20391.            FUNCTION_EPILOGUE to be used.  If you want the target switches to 
  20392.            control whether return instructions or epilogues are used, define a 
  20393.            `return' pattern with a validity condition that tests the target 
  20394.            switches appropriately.  If the `return' pattern's validity 
  20395.            condition is false, epilogues will be used. 
  20396.  
  20397.            On machines where functions may or may not have frame-pointers, the 
  20398.            function exit code must vary accordingly.  Sometimes the code for 
  20399.            these two cases is completely different.  To determine whether a 
  20400.            frame pointer is wanted, the macro can refer to the variable 
  20401.            frame_pointer_needed.  The variable's value will be 1 when compiling 
  20402.            a function that needs a frame pointer. 
  20403.  
  20404.            Normally, FUNCTION_PROLOGUE and FUNCTION_EPILOGUE must treat leaf 
  20405.            functions specially.  The C variable leaf_function is nonzero for 
  20406.            such a function.  See Leaf Functions. 
  20407.  
  20408.            On some machines, some functions pop their arguments on exit while 
  20409.            others leave that for the caller to do.  For example, the 68020 when 
  20410.            given `-mrtd' pops arguments in functions that take a fixed number 
  20411.            of arguments. 
  20412.  
  20413.            Your definition of the macro RETURN_POPS_ARGS decides which 
  20414.            functions pop their own arguments.  FUNCTION_EPILOGUE needs to know 
  20415.            what was decided.  The variable that is called 
  20416.            current_function_pops_args is the number of bytes of its arguments 
  20417.            that a function should pop.  See Scalar Return. 
  20418.  
  20419.  DELAY_SLOTS_FOR_EPILOGUE 
  20420.            Define this macro if the function epilogue contains delay slots to 
  20421.            which instructions from the rest of the function can be ``moved''. 
  20422.            The definition should be a C expression whose value is an integer 
  20423.            representing the number of delay slots there. 
  20424.  
  20425.  ELIGIBLE_FOR_EPILOGUE_DELAY (insn, n) 
  20426.            A C expression that returns 1 if insn can be placed in delay slot 
  20427.            number n of the epilogue. 
  20428.  
  20429.            The argument n is an integer which identifies the delay slot now 
  20430.            being considered (since different slots may have different rules of 
  20431.            eligibility).  It is never negative and is always less than the 
  20432.            number of epilogue delay slots (what DELAY_SLOTS_FOR_EPILOGUE 
  20433.            returns). If you reject a particular insn for a given delay slot, in 
  20434.            principle, it may be reconsidered for a subsequent delay slot. 
  20435.            Also, other insns may (at least in principle) be considered for the 
  20436.            so far unfilled delay slot. 
  20437.  
  20438.            The insns accepted to fill the epilogue delay slots are put in an 
  20439.            RTL list made with insn_list objects, stored in the variable 
  20440.            current_function_epilogue_delay_list.  The insn for the first delay 
  20441.            slot comes first in the list.  Your definition of the macro 
  20442.            FUNCTION_EPILOGUE should fill the delay slots by outputting the 
  20443.            insns in this list, usually by calling final_scan_insn. 
  20444.  
  20445.            You need not define this macro if you did not define 
  20446.            DELAY_SLOTS_FOR_EPILOGUE. 
  20447.  
  20448.  
  20449. ΓòÉΓòÉΓòÉ 21.7.10. Generating Code for Profiling ΓòÉΓòÉΓòÉ
  20450.  
  20451. These macros will help you generate code for profiling. 
  20452.  
  20453.  FUNCTION_PROFILER (file, labelno) 
  20454.            A C statement or compound statement to output to file some assembler 
  20455.            code to call the profiling subroutine mcount. Before calling, the 
  20456.            assembler code must load the address of a counter variable into a 
  20457.            register where mcount expects to find the address.  The name of this 
  20458.            variable is `LP' followed by the number labelno, so you would 
  20459.            generate the name using `LP%d' in a fprintf. 
  20460.  
  20461.            The details of how the address should be passed to mcount are 
  20462.            determined by your operating system environment, not by GNU CC.  To 
  20463.            figure them out, compile a small program for profiling using the 
  20464.            system's installed C compiler and look at the assembler code that 
  20465.            results. 
  20466.  
  20467.  PROFILE_BEFORE_PROLOGUE 
  20468.            Define this macro if the code for function profiling should come 
  20469.            before the function prologue.  Normally, the profiling code comes 
  20470.            after. 
  20471.  
  20472.  FUNCTION_BLOCK_PROFILER (file, labelno) 
  20473.            A C statement or compound statement to output to file some assembler 
  20474.            code to initialize basic-block profiling for the current object 
  20475.            module.  This code should call the subroutine __bb_init_func once 
  20476.            per object module, passing it as its sole argument the address of a 
  20477.            block allocated in the object module. 
  20478.  
  20479.            The name of the block is a local symbol made with this statement: 
  20480.  
  20481.                       ASM_GENERATE_INTERNAL_LABEL (buffer, "LPBX", 0);
  20482.  
  20483.            Of course, since you are writing the definition of 
  20484.            ASM_GENERATE_INTERNAL_LABEL as well as that of this macro, you can 
  20485.            take a short cut in the definition of this macro and use the name 
  20486.            that you know will result. 
  20487.  
  20488.            The first word of this block is a flag which will be nonzero if the 
  20489.            object module has already been initialized.  So test this word 
  20490.            first, and do not call __bb_init_func if the flag is nonzero. 
  20491.  
  20492.  BLOCK_PROFILER (file, blockno) 
  20493.            A C statement or compound statement to increment the count 
  20494.            associated with the basic block number blockno.  Basic blocks are 
  20495.            numbered separately from zero within each compilation.  The count 
  20496.            associated with block number blockno is at index blockno in a vector 
  20497.            of words; the name of this array is a local symbol made with this 
  20498.            statement: 
  20499.  
  20500.                       ASM_GENERATE_INTERNAL_LABEL (buffer, "LPBX", 2);
  20501.  
  20502.            Of course, since you are writing the definition of 
  20503.            ASM_GENERATE_INTERNAL_LABEL as well as that of this macro, you can 
  20504.            take a short cut in the definition of this macro and use the name 
  20505.            that you know will result. 
  20506.  
  20507.  BLOCK_PROFILER_CODE 
  20508.            A C function or functions which are needed in the library to support 
  20509.            block profiling. 
  20510.  
  20511.  
  20512. ΓòÉΓòÉΓòÉ 21.8. Implementing the Varargs Macros ΓòÉΓòÉΓòÉ
  20513.  
  20514. GNU CC comes with an implementation of `varargs.h' and `stdarg.h' that work 
  20515. without change on machines that pass arguments on the stack.  Other machines 
  20516. require their own implementations of varargs, and the two machine independent 
  20517. header files must have conditionals to include it. 
  20518.  
  20519. ANSI `stdarg.h' differs from traditional `varargs.h' mainly in the calling 
  20520. convention for va_start.  The traditional implementation takes just one 
  20521. argument, which is the variable in which to store the argument pointer.  The 
  20522. ANSI implementation of va_start takes an additional second argument.  The user 
  20523. is supposed to write the last named argument of the function here. 
  20524.  
  20525. However, va_start should not use this argument.  The way to find the end of the 
  20526. named arguments is with the built-in functions described below. 
  20527.  
  20528.  __builtin_saveregs () 
  20529.            Use this built-in function to save the argument registers in memory 
  20530.            so that the varargs mechanism can access them.  Both ANSI and 
  20531.            traditional versions of va_start must use __builtin_saveregs, unless 
  20532.            you use SETUP_INCOMING_VARARGS (see below) instead. 
  20533.  
  20534.            On some machines, __builtin_saveregs is open-coded under the control 
  20535.            of the macro EXPAND_BUILTIN_SAVEREGS.  On other machines, it calls a 
  20536.            routine written in assembler language, found in `libgcc2.c'. 
  20537.  
  20538.            Code generated for the call to __builtin_saveregs appears at the 
  20539.            beginning of the function, as opposed to where the call to 
  20540.            __builtin_saveregs is written, regardless of what the code is. This 
  20541.            is because the registers must be saved before the function starts to 
  20542.            use them for its own purposes. 
  20543.  
  20544.  __builtin_args_info (category) 
  20545.            Use this built-in function to find the first anonymous arguments in 
  20546.            registers. 
  20547.  
  20548.            In general, a machine may have several categories of registers used 
  20549.            for arguments, each for a particular category of data types.  (For 
  20550.            example, on some machines, floating-point registers are used for 
  20551.            floating-point arguments while other arguments are passed in the 
  20552.            general registers.) To make non-varargs functions use the proper 
  20553.            calling convention, you have defined the CUMULATIVE_ARGS data type 
  20554.            to record how many registers in each category have been used so far 
  20555.  
  20556.            __builtin_args_info accesses the same data structure of type 
  20557.            CUMULATIVE_ARGS after the ordinary argument layout is finished with 
  20558.            it, with category specifying which word to access.  Thus, the value 
  20559.            indicates the first unused register in a given category. 
  20560.  
  20561.            Normally, you would use __builtin_args_info in the implementation of 
  20562.            va_start, accessing each category just once and storing the value in 
  20563.            the va_list object.  This is because va_list will have to update the 
  20564.            values, and there is no way to alter the values accessed by 
  20565.            __builtin_args_info. 
  20566.  
  20567.  __builtin_next_arg (lastarg) 
  20568.            This is the equivalent of __builtin_args_info, for stack arguments. 
  20569.            It returns the address of the first anonymous stack argument, as 
  20570.            type void *. If ARGS_GROW_DOWNWARD, it returns the address of the 
  20571.            location above the first anonymous stack argument.  Use it in 
  20572.            va_start to initialize the pointer for fetching arguments from the 
  20573.            stack.  Also use it in va_start to verify that the second parameter 
  20574.            lastarg is the last named argument of the current function. 
  20575.  
  20576.  __builtin_classify_type (object) 
  20577.            Since each machine has its own conventions for which data types are 
  20578.            passed in which kind of register, your implementation of va_arg has 
  20579.            to embody these conventions.  The easiest way to categorize the 
  20580.            specified data type is to use __builtin_classify_type together with 
  20581.            sizeof and __alignof__. 
  20582.  
  20583.            __builtin_classify_type ignores the value of object, considering 
  20584.            only its data type.  It returns an integer describing what kind of 
  20585.            type that is---integer, floating, pointer, structure, and so on. 
  20586.  
  20587.            The file `typeclass.h' defines an enumeration that you can use to 
  20588.            interpret the values of __builtin_classify_type. 
  20589.  
  20590.  These machine description macros help implement varargs: 
  20591.  
  20592.  EXPAND_BUILTIN_SAVEREGS (args) 
  20593.            If defined, is a C expression that produces the machine-specific 
  20594.            code for a call to __builtin_saveregs.  This code will be moved to 
  20595.            the very beginning of the function, before any parameter access are 
  20596.            made. The return value of this function should be an RTX that 
  20597.            contains the value to use as the return of __builtin_saveregs. 
  20598.  
  20599.            The argument args is a tree_list containing the arguments that were 
  20600.            passed to __builtin_saveregs. 
  20601.  
  20602.            If this macro is not defined, the compiler will output an ordinary 
  20603.            call to the library function `__builtin_saveregs'. 
  20604.  
  20605.  SETUP_INCOMING_VARARGS (args_so_far, mode, type, 
  20606.            pretend_args_size, second_time) This macro offers an alternative to 
  20607.            using __builtin_saveregs and defining the macro 
  20608.            EXPAND_BUILTIN_SAVEREGS.  Use it to store the anonymous register 
  20609.            arguments into the stack so that all the arguments appear to have 
  20610.            been passed consecutively on the stack.  Once this is done, you can 
  20611.            use the standard implementation of varargs that works for machines 
  20612.            that pass all their arguments on the stack. 
  20613.  
  20614.            The argument args_so_far is the CUMULATIVE_ARGS data structure, 
  20615.            containing the values that obtain after processing of the named 
  20616.            arguments.  The arguments mode and type describe the last named 
  20617.            argument---its machine mode and its data type as a tree node. 
  20618.  
  20619.            The macro implementation should do two things: first, push onto the 
  20620.            stack all the argument registers not used for the named arguments, 
  20621.            and second, store the size of the data thus pushed into the 
  20622.            int-valued variable whose name is supplied as the argument 
  20623.            pretend_args_size.  The value that you store here will serve as 
  20624.            additional offset for setting up the stack frame. 
  20625.  
  20626.            Because you must generate code to push the anonymous arguments at 
  20627.            compile time without knowing their data types, 
  20628.            SETUP_INCOMING_VARARGS is only useful on machines that have just a 
  20629.            single category of argument register and use it uniformly for all 
  20630.            data types. 
  20631.  
  20632.            If the argument second_time is nonzero, it means that the arguments 
  20633.            of the function are being analyzed for the second time.  This 
  20634.            happens for an inline function, which is not actually compiled until 
  20635.            the end of the source file.  The macro SETUP_INCOMING_VARARGS should 
  20636.            not generate any instructions in this case. 
  20637.  
  20638.  STRICT_ARGUMENT_NAMING 
  20639.            Define this macro if the location where a function argument is 
  20640.            passed depends on whether or not it is a named argument. 
  20641.  
  20642.            This macro controls how the named argument to FUNCTION_ARG is set 
  20643.            for varargs and stdarg functions.  With this macro defined, the 
  20644.            named argument is always true for named arguments, and false for 
  20645.            unnamed arguments.  If this is not defined, but 
  20646.            SETUP_INCOMING_VARARGS is defined, then all arguments are treated as 
  20647.            named.  Otherwise, all named arguments except the last are treated 
  20648.            as named. 
  20649.  
  20650.  
  20651. ΓòÉΓòÉΓòÉ 21.9. Trampolines for Nested Functions ΓòÉΓòÉΓòÉ
  20652.  
  20653. A trampoline is a small piece of code that is created at run time when the 
  20654. address of a nested function is taken.  It normally resides on the stack, in 
  20655. the stack frame of the containing function.  These macros tell GNU CC how to 
  20656. generate code to allocate and initialize a trampoline. 
  20657.  
  20658. The instructions in the trampoline must do two things: load a constant address 
  20659. into the static chain register, and jump to the real address of the nested 
  20660. function.  On CISC machines such as the m68k, this requires two instructions, a 
  20661. move immediate and a jump.  Then the two addresses exist in the trampoline as 
  20662. word-long immediate operands.  On RISC machines, it is often necessary to load 
  20663. each address into a register in two parts.  Then pieces of each address form 
  20664. separate immediate operands. 
  20665.  
  20666. The code generated to initialize the trampoline must store the variable 
  20667. parts---the static chain value and the function address---into the immediate 
  20668. operands of the instructions.  On a CISC machine, this is simply a matter of 
  20669. copying each address to a memory reference at the proper offset from the start 
  20670. of the trampoline.  On a RISC machine, it may be necessary to take out pieces 
  20671. of the address and store them separately. 
  20672.  
  20673.  TRAMPOLINE_TEMPLATE (file) 
  20674.            A C statement to output, on the stream file, assembler code for a 
  20675.            block of data that contains the constant parts of a trampoline. 
  20676.            This code should not include a label---the label is taken care of 
  20677.            automatically. 
  20678.  
  20679.  TRAMPOLINE_SECTION 
  20680.            The name of a subroutine to switch to the section in which the 
  20681.            trampoline template is to be placed (see Sections).  The default is 
  20682.            a value of `readonly_data_section', which places the trampoline in 
  20683.            the section containing read-only data. 
  20684.  
  20685.  TRAMPOLINE_SIZE 
  20686.            A C expression for the size in bytes of the trampoline, as an 
  20687.            integer. 
  20688.  
  20689.  TRAMPOLINE_ALIGNMENT 
  20690.            Alignment required for trampolines, in bits. 
  20691.  
  20692.            If you don't define this macro, the value of BIGGEST_ALIGNMENT is 
  20693.            used for aligning trampolines. 
  20694.  
  20695.  INITIALIZE_TRAMPOLINE (addr, fnaddr, static_chain) 
  20696.            A C statement to initialize the variable parts of a trampoline. addr 
  20697.            is an RTX for the address of the trampoline; fnaddr is an RTX for 
  20698.            the address of the nested function; static_chain is an RTX for the 
  20699.            static chain value that should be passed to the function when it is 
  20700.            called. 
  20701.  
  20702.  ALLOCATE_TRAMPOLINE (fp) 
  20703.            A C expression to allocate run-time space for a trampoline.  The 
  20704.            expression value should be an RTX representing a memory reference to 
  20705.            the space for the trampoline. 
  20706.  
  20707.            If this macro is not defined, by default the trampoline is allocated 
  20708.            as a stack slot.  This default is right for most machines.  The 
  20709.            exceptions are machines where it is impossible to execute 
  20710.            instructions in the stack area.  On such machines, you may have to 
  20711.            implement a separate stack, using this macro in conjunction with 
  20712.            FUNCTION_PROLOGUE and FUNCTION_EPILOGUE. 
  20713.  
  20714.            fp points to a data structure, a struct function, which describes 
  20715.            the compilation status of the immediate containing function of the 
  20716.            function which the trampoline is for.  Normally (when 
  20717.            ALLOCATE_TRAMPOLINE is not defined), the stack slot for the 
  20718.            trampoline is in the stack frame of this containing function.  Other 
  20719.            allocation strategies probably must do something analogous with this 
  20720.            information. 
  20721.  
  20722.  Implementing trampolines is difficult on many machines because they have 
  20723.  separate instruction and data caches.  Writing into a stack location fails to 
  20724.  clear the memory in the instruction cache, so when the program jumps to that 
  20725.  location, it executes the old contents. 
  20726.  
  20727.  Here are two possible solutions.  One is to clear the relevant parts of the 
  20728.  instruction cache whenever a trampoline is set up.  The other is to make all 
  20729.  trampolines identical, by having them jump to a standard subroutine.  The 
  20730.  former technique makes trampoline execution faster; the latter makes 
  20731.  initialization faster. 
  20732.  
  20733.  To clear the instruction cache when a trampoline is initialized, define the 
  20734.  following macros which describe the shape of the cache. 
  20735.  
  20736.  INSN_CACHE_SIZE 
  20737.            The total size in bytes of the cache. 
  20738.  
  20739.  INSN_CACHE_LINE_WIDTH 
  20740.            The length in bytes of each cache line.  The cache is divided into 
  20741.            cache lines which are disjoint slots, each holding a contiguous 
  20742.            chunk of data fetched from memory.  Each time data is brought into 
  20743.            the cache, an entire line is read at once.  The data loaded into a 
  20744.            cache line is always aligned on a boundary equal to the line size. 
  20745.  
  20746.  INSN_CACHE_DEPTH 
  20747.            The number of alternative cache lines that can hold any particular 
  20748.            memory location. 
  20749.  
  20750.  Alternatively, if the machine has system calls or instructions to clear the 
  20751.  instruction cache directly, you can define the following macro. 
  20752.  
  20753.  CLEAR_INSN_CACHE (BEG, END) 
  20754.            If defined, expands to a C expression clearing the instruction cache 
  20755.            in the specified interval.  If it is not defined, and the macro 
  20756.            INSN_CACHE_SIZE is defined, some generic code is generated to clear 
  20757.            the cache.  The definition of this macro would typically be a series 
  20758.            of asm statements.  Both BEG and END are both pointer expressions. 
  20759.  
  20760.  To use a standard subroutine, define the following macro.  In addition, you 
  20761.  must make sure that the instructions in a trampoline fill an entire cache line 
  20762.  with identical instructions, or else ensure that the beginning of the 
  20763.  trampoline code is always aligned at the same point in its cache line.  Look 
  20764.  in `m68k.h' as a guide. 
  20765.  
  20766.  TRANSFER_FROM_TRAMPOLINE 
  20767.            Define this macro if trampolines need a special subroutine to do 
  20768.            their work.  The macro should expand to a series of asm statements 
  20769.            which will be compiled with GNU CC.  They go in a library function 
  20770.            named __transfer_from_trampoline. 
  20771.  
  20772.            If you need to avoid executing the ordinary prologue code of a 
  20773.            compiled C function when you jump to the subroutine, you can do so 
  20774.            by placing a special label of your own in the assembler code.  Use 
  20775.            one asm statement to generate an assembler label, and another to 
  20776.            make the label global.  Then trampolines can use that label to jump 
  20777.            directly to your special assembler code. 
  20778.  
  20779.  
  20780. ΓòÉΓòÉΓòÉ 21.10. Implicit Calls to Library Routines ΓòÉΓòÉΓòÉ
  20781.  
  20782. Here is an explanation of implicit calls to library routines. 
  20783.  
  20784.  MULSI3_LIBCALL 
  20785.            A C string constant giving the name of the function to call for 
  20786.            multiplication of one signed full-word by another.  If you do not 
  20787.            define this macro, the default name is used, which is __mulsi3, a 
  20788.            function defined in `libgcc.a'. 
  20789.  
  20790.  DIVSI3_LIBCALL 
  20791.            A C string constant giving the name of the function to call for 
  20792.            division of one signed full-word by another.  If you do not define 
  20793.            this macro, the default name is used, which is __divsi3, a function 
  20794.            defined in `libgcc.a'. 
  20795.  
  20796.  UDIVSI3_LIBCALL 
  20797.            A C string constant giving the name of the function to call for 
  20798.            division of one unsigned full-word by another.  If you do not define 
  20799.            this macro, the default name is used, which is __udivsi3, a function 
  20800.            defined in `libgcc.a'. 
  20801.  
  20802.  MODSI3_LIBCALL 
  20803.            A C string constant giving the name of the function to call for the 
  20804.            remainder in division of one signed full-word by another.  If you do 
  20805.            not define this macro, the default name is used, which is __modsi3, 
  20806.            a function defined in `libgcc.a'. 
  20807.  
  20808.  UMODSI3_LIBCALL 
  20809.            A C string constant giving the name of the function to call for the 
  20810.            remainder in division of one unsigned full-word by another.  If you 
  20811.            do not define this macro, the default name is used, which is 
  20812.            __umodsi3, a function defined in `libgcc.a'. 
  20813.  
  20814.  MULDI3_LIBCALL 
  20815.            A C string constant giving the name of the function to call for 
  20816.            multiplication of one signed double-word by another.  If you do not 
  20817.            define this macro, the default name is used, which is __muldi3, a 
  20818.            function defined in `libgcc.a'. 
  20819.  
  20820.  DIVDI3_LIBCALL 
  20821.            A C string constant giving the name of the function to call for 
  20822.            division of one signed double-word by another.  If you do not define 
  20823.            this macro, the default name is used, which is __divdi3, a function 
  20824.            defined in `libgcc.a'. 
  20825.  
  20826.  UDIVDI3_LIBCALL 
  20827.            A C string constant giving the name of the function to call for 
  20828.            division of one unsigned full-word by another.  If you do not define 
  20829.            this macro, the default name is used, which is __udivdi3, a function 
  20830.            defined in `libgcc.a'. 
  20831.  
  20832.  MODDI3_LIBCALL 
  20833.            A C string constant giving the name of the function to call for the 
  20834.            remainder in division of one signed double-word by another.  If you 
  20835.            do not define this macro, the default name is used, which is 
  20836.            __moddi3, a function defined in `libgcc.a'. 
  20837.  
  20838.  UMODDI3_LIBCALL 
  20839.            A C string constant giving the name of the function to call for the 
  20840.            remainder in division of one unsigned full-word by another.  If you 
  20841.            do not define this macro, the default name is used, which is 
  20842.            __umoddi3, a function defined in `libgcc.a'. 
  20843.  
  20844.  INIT_TARGET_OPTABS 
  20845.            Define this macro as a C statement that declares additional library 
  20846.            routines renames existing ones. init_optabs calls this macro after 
  20847.            initializing all the normal library routines. 
  20848.  
  20849.  TARGET_EDOM 
  20850.            The value of EDOM on the target machine, as a C integer constant 
  20851.            expression.  If you don't define this macro, GNU CC does not attempt 
  20852.            to deposit the value of EDOM into errno directly.  Look in 
  20853.            `/usr/include/errno.h' to find the value of EDOM on your system. 
  20854.  
  20855.            If you do not define TARGET_EDOM, then compiled code reports domain 
  20856.            errors by calling the library function and letting it report the 
  20857.            error.  If mathematical functions on your system use matherr when 
  20858.            there is an error, then you should leave TARGET_EDOM undefined so 
  20859.            that matherr is used normally. 
  20860.  
  20861.  GEN_ERRNO_RTX 
  20862.            Define this macro as a C expression to create an rtl expression that 
  20863.            refers to the global ``variable'' errno.  (On certain systems, errno 
  20864.            may not actually be a variable.)  If you don't define this macro, a 
  20865.            reasonable default is used. 
  20866.  
  20867.  TARGET_MEM_FUNCTIONS 
  20868.            Define this macro if GNU CC should generate calls to the System V 
  20869.            (and ANSI C) library functions memcpy and memset rather than the BSD 
  20870.            functions bcopy and bzero. 
  20871.  
  20872.  LIBGCC_NEEDS_DOUBLE 
  20873.            Define this macro if only float arguments cannot be passed to 
  20874.            library routines (so they must be converted to double).  This macro 
  20875.            affects both how library calls are generated and how the library 
  20876.            routines in `libgcc1.c' accept their arguments.  It is useful on 
  20877.            machines where floating and fixed point arguments are passed 
  20878.            differently, such as the i860. 
  20879.  
  20880.  FLOAT_ARG_TYPE 
  20881.            Define this macro to override the type used by the library routines 
  20882.            to pick up arguments of type float.  (By default, they use a union 
  20883.            of float and int.) 
  20884.  
  20885.            The obvious choice would be float---but that won't work with 
  20886.            traditional C compilers that expect all arguments declared as float 
  20887.            to arrive as double.  To avoid this conversion, the library routines 
  20888.            ask for the value as some other type and then treat it as a float. 
  20889.  
  20890.            On some systems, no other type will work for this.  For these 
  20891.            systems, you must use LIBGCC_NEEDS_DOUBLE instead, to force 
  20892.            conversion of the values double before they are passed. 
  20893.  
  20894.  FLOATIFY (passed-value) 
  20895.            Define this macro to override the way library routines redesignate a 
  20896.            float argument as a float instead of the type it was passed as.  The 
  20897.            default is an expression which takes the float field of the union. 
  20898.  
  20899.  FLOAT_VALUE_TYPE 
  20900.            Define this macro to override the type used by the library routines 
  20901.            to return values that ought to have type float.  (By default, they 
  20902.            use int.) 
  20903.  
  20904.            The obvious choice would be float---but that won't work with 
  20905.            traditional C compilers gratuitously convert values declared as 
  20906.            float into double. 
  20907.  
  20908.  INTIFY (float-value) 
  20909.            Define this macro to override the way the value of a float-returning 
  20910.            library routine should be packaged in order to return it.  These 
  20911.            functions are actually declared to return type FLOAT_VALUE_TYPE 
  20912.            (normally int). 
  20913.  
  20914.            These values can't be returned as type float because traditional C 
  20915.            compilers would gratuitously convert the value to a double. 
  20916.  
  20917.            A local variable named intify is always available when the macro 
  20918.            INTIFY is used.  It is a union of a float field named f and a field 
  20919.            named i whose type is FLOAT_VALUE_TYPE or int. 
  20920.  
  20921.            If you don't define this macro, the default definition works by 
  20922.            copying the value through that union. 
  20923.  
  20924.  nongcc_SI_type 
  20925.            Define this macro as the name of the data type corresponding to 
  20926.            SImode in the system's own C compiler. 
  20927.  
  20928.            You need not define this macro if that type is long int, as it 
  20929.            usually is. 
  20930.  
  20931.  nongcc_word_type 
  20932.            Define this macro as the name of the data type corresponding to the 
  20933.            word_mode in the system's own C compiler. 
  20934.  
  20935.            You need not define this macro if that type is long int, as it 
  20936.            usually is. 
  20937.  
  20938.  perform_... 
  20939.            Define these macros to supply explicit C statements to carry out 
  20940.            various arithmetic operations on types float and double in the 
  20941.            library routines in `libgcc1.c'.  See that file for a full list of 
  20942.            these macros and their arguments. 
  20943.  
  20944.            On most machines, you don't need to define any of these macros, 
  20945.            because the C compiler that comes with the system takes care of 
  20946.            doing them. 
  20947.  
  20948.  NEXT_OBJC_RUNTIME 
  20949.            Define this macro to generate code for Objective C message sending 
  20950.            using the calling convention of the NeXT system.  This calling 
  20951.            convention involves passing the object, the selector and the method 
  20952.            arguments all at once to the method-lookup library function. 
  20953.  
  20954.            The default calling convention passes just the object and the 
  20955.            selector to the lookup function, which returns a pointer to the 
  20956.            method. 
  20957.  
  20958.  
  20959. ΓòÉΓòÉΓòÉ 21.11. Addressing Modes ΓòÉΓòÉΓòÉ
  20960.  
  20961. This is about addressing modes. 
  20962.  
  20963.  HAVE_POST_INCREMENT 
  20964.            Define this macro if the machine supports post-increment addressing. 
  20965.  
  20966.  HAVE_PRE_INCREMENT 
  20967.  HAVE_POST_DECREMENT 
  20968.  HAVE_PRE_DECREMENT 
  20969.            Similar for other kinds of addressing. 
  20970.  
  20971.  CONSTANT_ADDRESS_P (x) 
  20972.            A C expression that is 1 if the RTX x is a constant which is a valid 
  20973.            address.  On most machines, this can be defined as CONSTANT_P (x), 
  20974.            but a few machines are more restrictive in which constant addresses 
  20975.            are supported. 
  20976.  
  20977.            CONSTANT_P accepts integer-values expressions whose values are not 
  20978.            explicitly known, such as symbol_ref, label_ref, and high 
  20979.            expressions and const arithmetic expressions, in addition to 
  20980.            const_int and const_double expressions. 
  20981.  
  20982.  MAX_REGS_PER_ADDRESS 
  20983.            A number, the maximum number of registers that can appear in a valid 
  20984.            memory address.  Note that it is up to you to specify a value equal 
  20985.            to the maximum number that GO_IF_LEGITIMATE_ADDRESS would ever 
  20986.            accept. 
  20987.  
  20988.  GO_IF_LEGITIMATE_ADDRESS (mode, x, label) 
  20989.            A C compound statement with a conditional goto label; executed if x 
  20990.            (an RTX) is a legitimate memory address on the target machine for a 
  20991.            memory operand of mode mode. 
  20992.  
  20993.            It usually pays to define several simpler macros to serve as 
  20994.            subroutines for this one.  Otherwise it may be too complicated to 
  20995.            understand. 
  20996.  
  20997.            This macro must exist in two variants: a strict variant and a 
  20998.            non-strict one.  The strict variant is used in the reload pass.  It 
  20999.            must be defined so that any pseudo-register that has not been 
  21000.            allocated a hard register is considered a memory reference.  In 
  21001.            contexts where some kind of register is required, a pseudo-register 
  21002.            with no hard register must be rejected. 
  21003.  
  21004.            The non-strict variant is used in other passes.  It must be defined 
  21005.            to accept all pseudo-registers in every context where some kind of 
  21006.            register is required. 
  21007.  
  21008.            Compiler source files that want to use the strict variant of this 
  21009.            macro define the macro REG_OK_STRICT.  You should use an #ifdef 
  21010.            REG_OK_STRICT conditional to define the strict variant in that case 
  21011.            and the non-strict variant otherwise. 
  21012.  
  21013.            Subroutines to check for acceptable registers for various purposes 
  21014.            (one for base registers, one for index registers, and so on) are 
  21015.            typically among the subroutines used to define 
  21016.            GO_IF_LEGITIMATE_ADDRESS. Then only these subroutine macros need 
  21017.            have two variants; the higher levels of macros may be the same 
  21018.            whether strict or not. 
  21019.  
  21020.            Normally, constant addresses which are the sum of a symbol_ref and 
  21021.            an integer are stored inside a const RTX to mark them as constant. 
  21022.            Therefore, there is no need to recognize such sums specifically as 
  21023.            legitimate addresses.  Normally you would simply recognize any const 
  21024.            as legitimate. 
  21025.  
  21026.            Usually PRINT_OPERAND_ADDRESS is not prepared to handle constant 
  21027.            sums that are not marked with  const.  It assumes that a naked plus 
  21028.            indicates indexing.  If so, then you must reject such naked constant 
  21029.            sums as illegitimate addresses, so that none of them will be given 
  21030.            to PRINT_OPERAND_ADDRESS. 
  21031.  
  21032.            On some machines, whether a symbolic address is legitimate depends 
  21033.            on the section that the address refers to.  On these machines, 
  21034.            define the macro ENCODE_SECTION_INFO to store the information into 
  21035.            the symbol_ref, and then check for it here.  When you see a const, 
  21036.            you will have to look inside it to find the symbol_ref in order to 
  21037.            determine the section. See Assembler Format. 
  21038.  
  21039.            The best way to modify the name string is by adding text to the 
  21040.            beginning, with suitable punctuation to prevent any ambiguity. 
  21041.            Allocate the new name in saveable_obstack.  You will have to modify 
  21042.            ASM_OUTPUT_LABELREF to remove and decode the added text and output 
  21043.            the name accordingly, and define STRIP_NAME_ENCODING to access the 
  21044.            original name string. 
  21045.  
  21046.            You can check the information stored here into the symbol_ref in the 
  21047.            definitions of the macros GO_IF_LEGITIMATE_ADDRESS and 
  21048.            PRINT_OPERAND_ADDRESS. 
  21049.  
  21050.  REG_OK_FOR_BASE_P (x) 
  21051.            A C expression that is nonzero if x (assumed to be a reg RTX) is 
  21052.            valid for use as a base register.  For hard registers, it should 
  21053.            always accept those which the hardware permits and reject the 
  21054.            others.  Whether the macro accepts or rejects pseudo registers must 
  21055.            be controlled by REG_OK_STRICT as described above.  This usually 
  21056.            requires two variant definitions, of which REG_OK_STRICT controls 
  21057.            the one actually used. 
  21058.  
  21059.  REG_OK_FOR_INDEX_P (x) 
  21060.            A C expression that is nonzero if x (assumed to be a reg RTX) is 
  21061.            valid for use as an index register. 
  21062.  
  21063.            The difference between an index register and a base register is that 
  21064.            the index register may be scaled.  If an address involves the sum of 
  21065.            two registers, neither one of them scaled, then either one may be 
  21066.            labeled the ``base'' and the other the ``index''; but whichever 
  21067.            labeling is used must fit the machine's constraints of which 
  21068.            registers may serve in each capacity.  The compiler will try both 
  21069.            labelings, looking for one that is valid, and will reload one or 
  21070.            both registers only if neither labeling works. 
  21071.  
  21072.  LEGITIMIZE_ADDRESS (x, oldx, mode, win) 
  21073.            A C compound statement that attempts to replace x with a valid 
  21074.            memory address for an operand of mode mode.  win will be a C 
  21075.            statement label elsewhere in the code; the macro definition may use 
  21076.  
  21077.                       GO_IF_LEGITIMATE_ADDRESS (mode, x, win);
  21078.  
  21079.            to avoid further processing if the address has become legitimate. 
  21080.  
  21081.            x will always be the result of a call to break_out_memory_refs, and 
  21082.            oldx will be the operand that was given to that function to produce 
  21083.            x. 
  21084.  
  21085.            The code generated by this macro should not alter the substructure 
  21086.            of x.  If it transforms x into a more legitimate form, it should 
  21087.            assign x (which will always be a C variable) a new value. 
  21088.  
  21089.            It is not necessary for this macro to come up with a legitimate 
  21090.            address.  The compiler has standard ways of doing so in all cases. 
  21091.            In fact, it is safe for this macro to do nothing.  But often a 
  21092.            machine-dependent strategy can generate better code. 
  21093.  
  21094.  GO_IF_MODE_DEPENDENT_ADDRESS (addr, label) 
  21095.            A C statement or compound statement with a conditional goto label; 
  21096.            executed if memory address x (an RTX) can have different meanings 
  21097.            depending on the machine mode of the memory reference it is used for 
  21098.            or if the address is valid for some modes but not others. 
  21099.  
  21100.            Autoincrement and autodecrement addresses typically have 
  21101.            mode-dependent effects because the amount of the increment or 
  21102.            decrement is the size of the operand being addressed.  Some machines 
  21103.            have other mode-dependent addresses.  Many RISC machines have no 
  21104.            mode-dependent addresses. 
  21105.  
  21106.            You may assume that addr is a valid address for the machine. 
  21107.  
  21108.  LEGITIMATE_CONSTANT_P (x) 
  21109.            A C expression that is nonzero if x is a legitimate constant for an 
  21110.            immediate operand on the target machine.  You can assume that x 
  21111.            satisfies CONSTANT_P, so you need not check this.  In fact, `1' is a 
  21112.            suitable definition for this macro on machines where anything 
  21113.            CONSTANT_P is valid. 
  21114.  
  21115.  
  21116. ΓòÉΓòÉΓòÉ 21.12. Condition Code Status ΓòÉΓòÉΓòÉ
  21117.  
  21118. This describes the condition code status. 
  21119.  
  21120. The file `conditions.h' defines a variable cc_status to describe how the 
  21121. condition code was computed (in case the interpretation of the condition code 
  21122. depends on the instruction that it was set by).  This variable contains the RTL 
  21123. expressions on which the condition code is currently based, and several 
  21124. standard flags. 
  21125.  
  21126. Sometimes additional machine-specific flags must be defined in the machine 
  21127. description header file.  It can also add additional machine-specific 
  21128. information by defining CC_STATUS_MDEP. 
  21129.  
  21130.  CC_STATUS_MDEP 
  21131.            C code for a data type which is used for declaring the mdep 
  21132.            component of cc_status.  It defaults to int. 
  21133.  
  21134.            This macro is not used on machines that do not use cc0. 
  21135.  
  21136.  CC_STATUS_MDEP_INIT 
  21137.            A C expression to initialize the mdep field to ``empty''. The 
  21138.            default definition does nothing, since most machines don't use the 
  21139.            field anyway.  If you want to use the field, you should probably 
  21140.            define this macro to initialize it. 
  21141.  
  21142.            This macro is not used on machines that do not use cc0. 
  21143.  
  21144.  NOTICE_UPDATE_CC (exp, insn) 
  21145.            A C compound statement to set the components of cc_status 
  21146.            appropriately for an insn insn whose body is exp.  It is this 
  21147.            macro's responsibility to recognize insns that set the condition 
  21148.            code as a byproduct of other activity as well as those that 
  21149.            explicitly set (cc0). 
  21150.  
  21151.            This macro is not used on machines that do not use cc0. 
  21152.  
  21153.            If there are insns that do not set the condition code but do alter 
  21154.            other machine registers, this macro must check to see whether they 
  21155.            invalidate the expressions that the condition code is recorded as 
  21156.            reflecting.  For example, on the 68000, insns that store in address 
  21157.            registers do not set the condition code, which means that usually 
  21158.            NOTICE_UPDATE_CC can leave cc_status unaltered for such insns.  But 
  21159.            suppose that the previous insn set the condition code based on 
  21160.            location `a4@(102)' and the current insn stores a new value in `a4'. 
  21161.            Although the condition code is not changed by this, it will no 
  21162.            longer be true that it reflects the contents of `a4@(102)'. 
  21163.            Therefore, NOTICE_UPDATE_CC must alter cc_status in this case to say 
  21164.            that nothing is known about the condition code value. 
  21165.  
  21166.            The definition of NOTICE_UPDATE_CC must be prepared to deal with the 
  21167.            results of peephole optimization: insns whose patterns are parallel 
  21168.            RTXs containing various reg, mem or constants which are just the 
  21169.            operands.  The RTL structure of these insns is not sufficient to 
  21170.            indicate what the insns actually do.  What NOTICE_UPDATE_CC should 
  21171.            do when it sees one is just to run CC_STATUS_INIT. 
  21172.  
  21173.            A possible definition of NOTICE_UPDATE_CC is to call a function that 
  21174.            looks at an attribute (see Insn Attributes) named, for example, 
  21175.            `cc'.  This avoids having detailed information about patterns in two 
  21176.            places, the `md' file and in NOTICE_UPDATE_CC. 
  21177.  
  21178.  EXTRA_CC_MODES 
  21179.            A list of names to be used for additional modes for condition code 
  21180.            values in registers (see Jump Patterns).  These names are added to 
  21181.            enum machine_mode and all have class MODE_CC.  By convention, they 
  21182.            should start with `CC' and end with `mode'. 
  21183.  
  21184.            You should only define this macro if your machine does not use cc0 
  21185.            and only if additional modes are required. 
  21186.  
  21187.  EXTRA_CC_NAMES 
  21188.            A list of C strings giving the names for the modes listed in 
  21189.            EXTRA_CC_MODES.  For example, the Sparc defines this macro and 
  21190.            EXTRA_CC_MODES as 
  21191.  
  21192.                       #define EXTRA_CC_MODES CC_NOOVmode, CCFPmode, CCFPEmode
  21193.                       #define EXTRA_CC_NAMES "CC_NOOV", "CCFP", "CCFPE"
  21194.  
  21195.            This macro is not required if EXTRA_CC_MODES is not defined. 
  21196.  
  21197.  SELECT_CC_MODE (op, x, y) 
  21198.            Returns a mode from class MODE_CC to be used when comparison 
  21199.            operation code op is applied to rtx x and y.  For example, on the 
  21200.            Sparc, SELECT_CC_MODE is defined as (see see Jump Patterns for a 
  21201.            description of the reason for this definition) 
  21202.  
  21203.                       #define SELECT_CC_MODE(OP,X,Y) \
  21204.                         (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
  21205.                          ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
  21206.                          : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
  21207.                              || GET_CODE (X) == NEG) \
  21208.                             ? CC_NOOVmode : CCmode))
  21209.  
  21210.            You need not define this macro if EXTRA_CC_MODES is not defined. 
  21211.  
  21212.  CANONICALIZE_COMPARISON (code, op0, op1) 
  21213.            One some machines not all possible comparisons are defined, but you 
  21214.            can convert an invalid comparison into a valid one.  For example, 
  21215.            the Alpha does not have a GT comparison, but you can use an LT 
  21216.            comparison instead and swap the order of the operands. 
  21217.  
  21218.            On such machines, define this macro to be a C statement to do any 
  21219.            required conversions.  code is the initial comparison code and op0 
  21220.            and op1 are the left and right operands of the comparison, 
  21221.            respectively.  You should modify code, op0, and op1 as required. 
  21222.  
  21223.            GNU CC will not assume that the comparison resulting from this macro 
  21224.            is valid but will see if the resulting insn matches a pattern in the 
  21225.            `md' file. 
  21226.  
  21227.            You need not define this macro if it would never change the 
  21228.            comparison code or operands. 
  21229.  
  21230.  REVERSIBLE_CC_MODE (mode) 
  21231.            A C expression whose value is one if it is always safe to reverse a 
  21232.            comparison whose mode is mode.  If SELECT_CC_MODE can ever return 
  21233.            mode for a floating-point inequality comparison, then 
  21234.            REVERSIBLE_CC_MODE (mode) must be zero. 
  21235.  
  21236.            You need not define this macro if it would always returns zero or if 
  21237.            the floating-point format is anything other than IEEE_FLOAT_FORMAT. 
  21238.            For example, here is the definition used on the Sparc, where 
  21239.            floating-point inequality comparisons are always given CCFPEmode: 
  21240.  
  21241.                       #define REVERSIBLE_CC_MODE(MODE)  ((MODE) != CCFPEmode)
  21242.  
  21243.  
  21244. ΓòÉΓòÉΓòÉ 21.13. Describing Relative Costs of Operations ΓòÉΓòÉΓòÉ
  21245.  
  21246. These macros let you describe the relative speed of various operations on the 
  21247. target machine. 
  21248.  
  21249.  CONST_COSTS (x, code, outer_code) 
  21250.            A part of a C switch statement that describes the relative costs of 
  21251.            constant RTL expressions.  It must contain case labels for 
  21252.            expression codes const_int, const, symbol_ref, label_ref and 
  21253.            const_double.  Each case must ultimately reach a return statement to 
  21254.            return the relative cost of the use of that kind of constant value 
  21255.            in an expression.  The cost may depend on the precise value of the 
  21256.            constant, which is available for examination in x, and the rtx code 
  21257.            of the expression in which it is contained, found in outer_code. 
  21258.  
  21259.            code is the expression code---redundant, since it can be obtained 
  21260.            with GET_CODE (x). 
  21261.  
  21262.  RTX_COSTS (x, code, outer_code) 
  21263.            Like CONST_COSTS but applies to nonconstant RTL expressions. This 
  21264.            can be used, for example, to indicate how costly a multiply 
  21265.            instruction is.  In writing this macro, you can use the construct 
  21266.            COSTS_N_INSNS (n) to specify a cost equal to n fast instructions. 
  21267.            outer_code is the code of the expression in which x is contained. 
  21268.  
  21269.            This macro is optional; do not define it if the default cost 
  21270.            assumptions are adequate for the target machine. 
  21271.  
  21272.  ADDRESS_COST (address) 
  21273.            An expression giving the cost of an addressing mode that contains 
  21274.            address.  If not defined, the cost is computed from the address 
  21275.            expression and the CONST_COSTS values. 
  21276.  
  21277.            For most CISC machines, the default cost is a good approximation of 
  21278.            the true cost of the addressing mode.  However, on RISC machines, 
  21279.            all instructions normally have the same length and execution time. 
  21280.            Hence all addresses will have equal costs. 
  21281.  
  21282.            In cases where more than one form of an address is known, the form 
  21283.            with the lowest cost will be used.  If multiple forms have the same, 
  21284.            lowest, cost, the one that is the most complex will be used. 
  21285.  
  21286.            For example, suppose an address that is equal to the sum of a 
  21287.            register and a constant is used twice in the same basic block.  When 
  21288.            this macro is not defined, the address will be computed in a 
  21289.            register and memory references will be indirect through that 
  21290.            register.  On machines where the cost of the addressing mode 
  21291.            containing the sum is no higher than that of a simple indirect 
  21292.            reference, this will produce an additional instruction and possibly 
  21293.            require an additional register.  Proper specification of this macro 
  21294.            eliminates this overhead for such machines. 
  21295.  
  21296.            Similar use of this macro is made in strength reduction of loops. 
  21297.  
  21298.            address need not be valid as an address.  In such a case, the cost 
  21299.            is not relevant and can be any value; invalid addresses need not be 
  21300.            assigned a different cost. 
  21301.  
  21302.            On machines where an address involving more than one register is as 
  21303.            cheap as an address computation involving only one register, 
  21304.            defining ADDRESS_COST to reflect this can cause two registers to be 
  21305.            live over a region of code where only one would have been if 
  21306.            ADDRESS_COST were not defined in that manner.  This effect should be 
  21307.            considered in the definition of this macro.  Equivalent costs should 
  21308.            probably only be given to addresses with different numbers of 
  21309.            registers on machines with lots of registers. 
  21310.  
  21311.            This macro will normally either not be defined or be defined as a 
  21312.            constant. 
  21313.  
  21314.  REGISTER_MOVE_COST (from, to) 
  21315.            A C expression for the cost of moving data from a register in class 
  21316.            from to one in class to.  The classes are expressed using the 
  21317.            enumeration values such as GENERAL_REGS.  A value of 4 is the 
  21318.            default; other values are interpreted relative to that. 
  21319.  
  21320.            It is not required that the cost always equal 2 when from is the 
  21321.            same as to; on some machines it is expensive to move between 
  21322.            registers if they are not general registers. 
  21323.  
  21324.            If reload sees an insn consisting of a single set between two hard 
  21325.            registers, and if REGISTER_MOVE_COST applied to their classes 
  21326.            returns a value of 2, reload does not check to ensure that the 
  21327.            constraints of the insn are met.  Setting a cost of other than 2 
  21328.            will allow reload to verify that the constraints are met.  You 
  21329.            should do this if the `movm' pattern's constraints do not allow such 
  21330.            copying. 
  21331.  
  21332.  MEMORY_MOVE_COST (m) 
  21333.            A C expression for the cost of moving data of mode m between a 
  21334.            register and memory.  A value of 2 is the default; this cost is 
  21335.            relative to those in REGISTER_MOVE_COST. 
  21336.  
  21337.            If moving between registers and memory is more expensive than 
  21338.            between two registers, you should define this macro to express the 
  21339.            relative cost. 
  21340.  
  21341.  BRANCH_COST 
  21342.            A C expression for the cost of a branch instruction.  A value of 1 
  21343.            is the default; other values are interpreted relative to that. 
  21344.  
  21345.  Here are additional macros which do not specify precise relative costs, but 
  21346.  only that certain actions are more expensive than GNU CC would ordinarily 
  21347.  expect. 
  21348.  
  21349.  SLOW_BYTE_ACCESS 
  21350.            Define this macro as a C expression which is nonzero if accessing 
  21351.            less than a word of memory (i.e. a char or a short) is no faster 
  21352.            than accessing a word of memory, i.e., if such access require more 
  21353.            than one instruction or if there is no difference in cost between 
  21354.            byte and (aligned) word loads. 
  21355.  
  21356.            When this macro is not defined, the compiler will access a field by 
  21357.            finding the smallest containing object; when it is defined, a 
  21358.            fullword load will be used if alignment permits.  Unless bytes 
  21359.            accesses are faster than word accesses, using word accesses is 
  21360.            preferable since it may eliminate subsequent memory access if 
  21361.            subsequent accesses occur to other fields in the same word of the 
  21362.            structure, but to different bytes. 
  21363.  
  21364.  SLOW_ZERO_EXTEND 
  21365.            Define this macro if zero-extension (of a char or short to an int) 
  21366.            can be done faster if the destination is a register that is known to 
  21367.            be zero. 
  21368.  
  21369.            If you define this macro, you must have instruction patterns that 
  21370.            recognize RTL structures like this: 
  21371.  
  21372.                       (set (strict_low_part (subreg:QI (reg:SI ...) 0)) ...)
  21373.  
  21374.            and likewise for HImode. 
  21375.  
  21376.  SLOW_UNALIGNED_ACCESS 
  21377.            Define this macro to be the value 1 if unaligned accesses have a 
  21378.            cost many times greater than aligned accesses, for example if they 
  21379.            are emulated in a trap handler. 
  21380.  
  21381.            When this macro is non-zero, the compiler will act as if 
  21382.            STRICT_ALIGNMENT were non-zero when generating code for block moves. 
  21383.            This can cause significantly more instructions to be produced. 
  21384.            Therefore, do not set this macro non-zero if unaligned accesses only 
  21385.            add a cycle or two to the time for a memory access. 
  21386.  
  21387.            If the value of this macro is always zero, it need not be defined. 
  21388.  
  21389.  DONT_REDUCE_ADDR 
  21390.            Define this macro to inhibit strength reduction of memory addresses. 
  21391.            (On some machines, such strength reduction seems to do harm rather 
  21392.            than good.) 
  21393.  
  21394.  MOVE_RATIO 
  21395.            The number of scalar move insns which should be generated instead of 
  21396.            a string move insn or a library call.  Increasing the value will 
  21397.            always make code faster, but eventually incurs high cost in 
  21398.            increased code size. 
  21399.  
  21400.            If you don't define this, a reasonable default is used. 
  21401.  
  21402.  NO_FUNCTION_CSE 
  21403.            Define this macro if it is as good or better to call a constant 
  21404.            function address than to call an address kept in a register. 
  21405.  
  21406.  NO_RECURSIVE_FUNCTION_CSE 
  21407.            Define this macro if it is as good or better for a function to call 
  21408.            itself with an explicit address than to call an address kept in a 
  21409.            register. 
  21410.  
  21411.  ADJUST_COST (insn, link, dep_insn, cost) 
  21412.            A C statement (sans semicolon) to update the integer variable cost 
  21413.            based on the relationship between insn that is dependent on dep_insn 
  21414.            through the dependence link.  The default is to make no adjustment 
  21415.            to cost.  This can be used for example to specify to the scheduler 
  21416.            that an output- or anti-dependence does not incur the same cost as a 
  21417.            data-dependence. 
  21418.  
  21419.  
  21420. ΓòÉΓòÉΓòÉ 21.14. Dividing the Output into Sections (Texts, Data, ) ΓòÉΓòÉΓòÉ
  21421.  
  21422. An object file is divided into sections containing different types of data.  In 
  21423. the most common case, there are three sections: the text section, which holds 
  21424. instructions and read-only data; the data section, which holds initialized 
  21425. writable data; and the bss section, which holds uninitialized data.  Some 
  21426. systems have other kinds of sections. 
  21427.  
  21428. The compiler must tell the assembler when to switch sections.  These macros 
  21429. control what commands to output to tell the assembler this.  You can also 
  21430. define additional sections. 
  21431.  
  21432.  TEXT_SECTION_ASM_OP 
  21433.            A C expression whose value is a string containing the assembler 
  21434.            operation that should precede instructions and read-only data. 
  21435.            Normally ".text" is right. 
  21436.  
  21437.  DATA_SECTION_ASM_OP 
  21438.            A C expression whose value is a string containing the assembler 
  21439.            operation to identify the following data as writable initialized 
  21440.            data. Normally ".data" is right. 
  21441.  
  21442.  SHARED_SECTION_ASM_OP 
  21443.            if defined, a C expression whose value is a string containing the 
  21444.            assembler operation to identify the following data as shared data. 
  21445.            If not defined, DATA_SECTION_ASM_OP will be used. 
  21446.  
  21447.  INIT_SECTION_ASM_OP 
  21448.            if defined, a C expression whose value is a string containing the 
  21449.            assembler operation to identify the following data as initialization 
  21450.            code.  If not defined, GNU CC will assume such a section does not 
  21451.            exist. 
  21452.  
  21453.  EXTRA_SECTIONS 
  21454.            A list of names for sections other than the standard two, which are 
  21455.            in_text and in_data.  You need not define this macro on a system 
  21456.            with no other sections (that GCC needs to use). 
  21457.  
  21458.  EXTRA_SECTION_FUNCTIONS 
  21459.            One or more functions to be defined in `varasm.c'.  These functions 
  21460.            should do jobs analogous to those of text_section and data_section, 
  21461.            for your additional sections.  Do not define this macro if you do 
  21462.            not define EXTRA_SECTIONS. 
  21463.  
  21464.  READONLY_DATA_SECTION 
  21465.            On most machines, read-only variables, constants, and jump tables 
  21466.            are placed in the text section.  If this is not the case on your 
  21467.            machine, this macro should be defined to be the name of a function 
  21468.            (either data_section or a function defined in EXTRA_SECTIONS) that 
  21469.            switches to the section to be used for read-only items. 
  21470.  
  21471.            If these items should be placed in the text section, this macro 
  21472.            should not be defined. 
  21473.  
  21474.  SELECT_SECTION (exp, reloc) 
  21475.            A C statement or statements to switch to the appropriate section for 
  21476.            output of exp.  You can assume that exp is either a VAR_DECL node or 
  21477.            a constant of some sort.  reloc indicates whether the initial value 
  21478.            of exp requires link-time relocations.  Select the section by 
  21479.            calling text_section or one of the alternatives for other sections. 
  21480.  
  21481.            Do not define this macro if you put all read-only variables and 
  21482.            constants in the read-only data section (usually the text section). 
  21483.  
  21484.  SELECT_RTX_SECTION (mode, rtx) 
  21485.            A C statement or statements to switch to the appropriate section for 
  21486.            output of rtx in mode mode.  You can assume that rtx is some kind of 
  21487.            constant in RTL.  The argument mode is redundant except in the case 
  21488.            of a const_int rtx.  Select the section by calling text_section or 
  21489.            one of the alternatives for other sections. 
  21490.  
  21491.            Do not define this macro if you put all constants in the read-only 
  21492.            data section. 
  21493.  
  21494.  JUMP_TABLES_IN_TEXT_SECTION 
  21495.            Define this macro if jump tables (for tablejump insns) should be 
  21496.            output in the text section, along with the assembler instructions. 
  21497.            Otherwise, the readonly data section is used. 
  21498.  
  21499.            This macro is irrelevant if there is no separate readonly data 
  21500.            section. 
  21501.  
  21502.  ENCODE_SECTION_INFO (decl) 
  21503.            Define this macro if references to a symbol must be treated 
  21504.            differently depending on something about the variable or function 
  21505.            named by the symbol (such as what section it is in). 
  21506.  
  21507.            The macro definition, if any, is executed immediately after the rtl 
  21508.            for decl has been created and stored in DECL_RTL (decl). The value 
  21509.            of the rtl will be a mem whose address is a symbol_ref. 
  21510.  
  21511.            The usual thing for this macro to do is to record a flag in the 
  21512.            symbol_ref (such as SYMBOL_REF_FLAG) or to store a modified name 
  21513.            string in the symbol_ref (if one bit is not enough information). 
  21514.  
  21515.  STRIP_NAME_ENCODING (var, sym_name) 
  21516.            Decode sym_name and store the real name part in var, sans the 
  21517.            characters that encode section info.  Define this macro if 
  21518.            ENCODE_SECTION_INFO alters the symbol's name string. 
  21519.  
  21520.  
  21521. ΓòÉΓòÉΓòÉ 21.15. Position Independent Code ΓòÉΓòÉΓòÉ
  21522.  
  21523. This section describes macros that help implement generation of position 
  21524. independent code.  Simply defining these macros is not enough to generate valid 
  21525. PIC; you must also add support to the macros GO_IF_LEGITIMATE_ADDRESS and 
  21526. PRINT_OPERAND_ADDRESS, as well as LEGITIMIZE_ADDRESS.  You must modify the 
  21527. definition of `movsi' to do something appropriate when the source operand 
  21528. contains a symbolic address.  You may also need to alter the handling of switch 
  21529. statements so that they use relative addresses. 
  21530.  
  21531.  PIC_OFFSET_TABLE_REGNUM 
  21532.            The register number of the register used to address a table of 
  21533.            static data addresses in memory.  In some cases this register is 
  21534.            defined by a processor's ``application binary interface'' (ABI). 
  21535.            When this macro is defined, RTL is generated for this register once, 
  21536.            as with the stack pointer and frame pointer registers.  If this 
  21537.            macro is not defined, it is up to the machine-dependent files to 
  21538.            allocate such a register (if necessary). 
  21539.  
  21540.  PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 
  21541.            Define this macro if the register defined by PIC_OFFSET_TABLE_REGNUM 
  21542.            is clobbered by calls.  Do not define this macro if 
  21543.            PPIC_OFFSET_TABLE_REGNUM is not defined. 
  21544.  
  21545.  FINALIZE_PIC 
  21546.            By generating position-independent code, when two different programs 
  21547.            (A and B) share a common library (libC.a), the text of the library 
  21548.            can be shared whether or not the library is linked at the same 
  21549.            address for both programs.  In some of these environments, 
  21550.            position-independent code requires not only the use of different 
  21551.            addressing modes, but also special code to enable the use of these 
  21552.            addressing modes. 
  21553.  
  21554.            The FINALIZE_PIC macro serves as a hook to emit these special codes 
  21555.            once the function is being compiled into assembly code, but not 
  21556.            before.  (It is not done before, because in the case of compiling an 
  21557.            inline function, it would lead to multiple PIC prologues being 
  21558.            included in functions which used inline functions and were compiled 
  21559.            to assembly language.) 
  21560.  
  21561.  LEGITIMATE_PIC_OPERAND_P (x) 
  21562.            A C expression that is nonzero if x is a legitimate immediate 
  21563.            operand on the target machine when generating position independent 
  21564.            code. You can assume that x satisfies CONSTANT_P, so you need not 
  21565.            check this.  You can also assume flag_pic is true, so you need not 
  21566.            check it either.  You need not define this macro if all constants 
  21567.            (including SYMBOL_REF) can be immediate operands when generating 
  21568.            position independent code. 
  21569.  
  21570.  
  21571. ΓòÉΓòÉΓòÉ 21.16. Defining the Output Assembler Language ΓòÉΓòÉΓòÉ
  21572.  
  21573. This section describes macros whose principal purpose is to describe how to 
  21574. write instructions in assembler language--rather than what the instructions do. 
  21575.  
  21576.  File Framework                          Structural information for the 
  21577.                                          assembler file. 
  21578.  Data Output                             Output of constants (numbers, strings, 
  21579.                                          addresses). 
  21580.  Uninitialized Data                      Output of uninitialized variables. 
  21581.  Label Output                            Output and generation of labels. 
  21582.  Initialization                          General principles of initialization 
  21583.                                          and termination routines. 
  21584.  Macros for Initialization 
  21585.      i     i     i Specific macros that control the handling of 
  21586.  initialization and termination routines. 
  21587.  
  21588.  Instruction Output                      Output of actual instructions. 
  21589.  Dispatch Tables                         Output of jump tables. 
  21590.  Alignment Output                        Pseudo ops for alignment and skipping 
  21591.                                          data. 
  21592.  
  21593.  
  21594. ΓòÉΓòÉΓòÉ 21.16.1. The Overall Framework of an Assembler File ΓòÉΓòÉΓòÉ
  21595.  
  21596. This describes the overall framework of an assembler file. 
  21597.  
  21598.  ASM_FILE_START (stream) 
  21599.            A C expression which outputs to the stdio stream stream some 
  21600.            appropriate text to go at the start of an assembler file. 
  21601.  
  21602.            Normally this macro is defined to output a line containing 
  21603.            `#NO_APP', which is a comment that has no effect on most assemblers 
  21604.            but tells the GNU assembler that it can save time by not checking 
  21605.            for certain assembler constructs. 
  21606.  
  21607.            On systems that use SDB, it is necessary to output certain commands; 
  21608.            see `attasm.h'. 
  21609.  
  21610.  ASM_FILE_END (stream) 
  21611.            A C expression which outputs to the stdio stream stream some 
  21612.            appropriate text to go at the end of an assembler file. 
  21613.  
  21614.            If this macro is not defined, the default is to output nothing 
  21615.            special at the end of the file.  Most systems don't require any 
  21616.            definition. 
  21617.  
  21618.            On systems that use SDB, it is necessary to output certain commands; 
  21619.            see `attasm.h'. 
  21620.  
  21621.  ASM_IDENTIFY_GCC (file) 
  21622.            A C statement to output assembler commands which will identify the 
  21623.            object file as having been compiled with GNU CC (or another GNU 
  21624.            compiler). 
  21625.  
  21626.            If you don't define this macro, the string `gcc_compiled.:' is 
  21627.            output.  This string is calculated to define a symbol which, on BSD 
  21628.            systems, will never be defined for any other reason. GDB checks for 
  21629.            the presence of this symbol when reading the symbol table of an 
  21630.            executable. 
  21631.  
  21632.            On non-BSD systems, you must arrange communication with GDB in some 
  21633.            other fashion.  If GDB is not used on your system, you can define 
  21634.            this macro with an empty body. 
  21635.  
  21636.  ASM_COMMENT_START 
  21637.            A C string constant describing how to begin a comment in the target 
  21638.            assembler language.  The compiler assumes that the comment will end 
  21639.            at the end of the line. 
  21640.  
  21641.  ASM_APP_ON 
  21642.            A C string constant for text to be output before each asm statement 
  21643.            or group of consecutive ones.  Normally this is "#APP", which is a 
  21644.            comment that has no effect on most assemblers but tells the GNU 
  21645.            assembler that it must check the lines that follow for all valid 
  21646.            assembler constructs. 
  21647.  
  21648.  ASM_APP_OFF 
  21649.            A C string constant for text to be output after each asm statement 
  21650.            or group of consecutive ones.  Normally this is "#NO_APP", which 
  21651.            tells the GNU assembler to resume making the time-saving assumptions 
  21652.            that are valid for ordinary compiler output. 
  21653.  
  21654.  ASM_OUTPUT_SOURCE_FILENAME (stream, name) 
  21655.            A C statement to output COFF information or DWARF debugging 
  21656.            information which indicates that filename name is the current source 
  21657.            file to the stdio stream stream. 
  21658.  
  21659.            This macro need not be defined if the standard form of output for 
  21660.            the file format in use is appropriate. 
  21661.  
  21662.  ASM_OUTPUT_SOURCE_LINE (stream, line) 
  21663.            A C statement to output DBX or SDB debugging information before code 
  21664.            for line number line of the current source file to the stdio stream 
  21665.            stream. 
  21666.  
  21667.            This macro need not be defined if the standard form of debugging 
  21668.            information for the debugger in use is appropriate. 
  21669.  
  21670.  ASM_OUTPUT_IDENT (stream, string) 
  21671.            A C statement to output something to the assembler file to handle a 
  21672.            `#ident' directive containing the text string.  If this macro is not 
  21673.            defined, nothing is output for a `#ident' directive. 
  21674.  
  21675.  ASM_OUTPUT_SECTION_NAME (stream, decl, name) 
  21676.            A C statement to output something to the assembler file to switch to 
  21677.            section name for object decl which is either a FUNCTION_DECL, a 
  21678.            VAR_DECL or NULL_TREE.  Some target formats do not support arbitrary 
  21679.            sections.  Do not define this macro in such cases. 
  21680.  
  21681.            At present this macro is only used to support section attributes. 
  21682.            When this macro is undefined, section attributes are disabled. 
  21683.  
  21684.  OBJC_PROLOGUE 
  21685.            A C statement to output any assembler statements which are required 
  21686.            to precede any Objective C object definitions or message sending. 
  21687.            The statement is executed only when compiling an Objective C 
  21688.            program. 
  21689.  
  21690.  
  21691. ΓòÉΓòÉΓòÉ 21.16.2. Output of Data ΓòÉΓòÉΓòÉ
  21692.  
  21693. This describes data output. 
  21694.  
  21695.  ASM_OUTPUT_LONG_DOUBLE (stream, value) 
  21696.  ASM_OUTPUT_DOUBLE (stream, value) 
  21697.  ASM_OUTPUT_FLOAT (stream, value) 
  21698.  ASM_OUTPUT_THREE_QUARTER_FLOAT (stream, value) 
  21699.  ASM_OUTPUT_SHORT_FLOAT (stream, value) 
  21700.  ASM_OUTPUT_BYTE_FLOAT (stream, value) 
  21701.            A C statement to output to the stdio stream stream an assembler 
  21702.            instruction to assemble a floating-point constant of TFmode, DFmode, 
  21703.            SFmode, TQFmode, HFmode, or QFmode, respectively, whose value is 
  21704.            value.  value will be a C expression of type REAL_VALUE_TYPE. 
  21705.            Macros such as REAL_VALUE_TO_TARGET_DOUBLE are useful for writing 
  21706.            these definitions. 
  21707.  
  21708.  ASM_OUTPUT_QUADRUPLE_INT (stream, exp) 
  21709.  ASM_OUTPUT_DOUBLE_INT (stream, exp) 
  21710.  ASM_OUTPUT_INT (stream, exp) 
  21711.  ASM_OUTPUT_SHORT (stream, exp) 
  21712.  ASM_OUTPUT_CHAR (stream, exp) 
  21713.            A C statement to output to the stdio stream stream an assembler 
  21714.            instruction to assemble an integer of 16, 8, 4, 2 or 1 bytes, 
  21715.            respectively, whose value is value.  The argument exp will be an RTL 
  21716.            expression which represents a constant value.  Use 
  21717.            `output_addr_const (stream, exp)' to output this value as an 
  21718.            assembler expression. 
  21719.  
  21720.            For sizes larger than UNITS_PER_WORD, if the action of a macro would 
  21721.            be identical to repeatedly calling the macro corresponding to a size 
  21722.            of UNITS_PER_WORD, once for each word, you need not define the 
  21723.            macro. 
  21724.  
  21725.  ASM_OUTPUT_BYTE (stream, value) 
  21726.            A C statement to output to the stdio stream stream an assembler 
  21727.            instruction to assemble a single byte containing the number value. 
  21728.  
  21729.  ASM_BYTE_OP 
  21730.            A C string constant giving the pseudo-op to use for a sequence of 
  21731.            single-byte constants.  If this macro is not defined, the default is 
  21732.            "byte". 
  21733.  
  21734.  ASM_OUTPUT_ASCII (stream, ptr, len) 
  21735.            A C statement to output to the stdio stream stream an assembler 
  21736.            instruction to assemble a string constant containing the len bytes 
  21737.            at ptr.  ptr will be a C expression of type char * and len a C 
  21738.            expression of type int. 
  21739.  
  21740.            If the assembler has a .ascii pseudo-op as found in the Berkeley 
  21741.            Unix assembler, do not define the macro ASM_OUTPUT_ASCII. 
  21742.  
  21743.  ASM_OUTPUT_POOL_PROLOGUE (file funname fundecl size) 
  21744.            A C statement to output assembler commands to define the start of 
  21745.            the constant pool for a function.  funname is a string giving the 
  21746.            name of the function.  Should the return type of the function be 
  21747.            required, it can be obtained via fundecl.  size is the size, in 
  21748.            bytes, of the constant pool that will be written immediately after 
  21749.            this call. 
  21750.  
  21751.            If no constant-pool prefix is required, the usual case, this macro 
  21752.            need not be defined. 
  21753.  
  21754.  ASM_OUTPUT_SPECIAL_POOL_ENTRY (file, x, mode, align, labelno, jumpto) 
  21755.            A C statement (with or without semicolon) to output a constant in 
  21756.            the constant pool, if it needs special treatment.  (This macro need 
  21757.            not do anything for RTL expressions that can be output normally.) 
  21758.  
  21759.            The argument file is the standard I/O stream to output the assembler 
  21760.            code on.  x is the RTL expression for the constant to output, and 
  21761.            mode is the machine mode (in case x is a `const_int').  align is the 
  21762.            required alignment for the value x; you should output an assembler 
  21763.            directive to force this much alignment. 
  21764.  
  21765.            The argument labelno is a number to use in an internal label for the 
  21766.            address of this pool entry.  The definition of this macro is 
  21767.            responsible for outputting the label definition at the proper place. 
  21768.            Here is how to do this: 
  21769.  
  21770.                       ASM_OUTPUT_INTERNAL_LABEL (file, "LC", labelno);
  21771.  
  21772.            When you output a pool entry specially, you should end with a goto 
  21773.            to the label jumpto.  This will prevent the same pool entry from 
  21774.            being output a second time in the usual manner. 
  21775.  
  21776.            You need not define this macro if it would do nothing. 
  21777.  
  21778.  IS_ASM_LOGICAL_LINE_SEPARATOR (C) 
  21779.            Define this macro as a C expression which is nonzero if C is used as 
  21780.            a logical line separator by the assembler. 
  21781.  
  21782.            If you do not define this macro, the default is that only the 
  21783.            character `;' is treated as a logical line separator. 
  21784.  
  21785.  ASM_OPEN_PAREN 
  21786.  ASM_CLOSE_PAREN 
  21787.            These macros are defined as C string constant, describing the syntax 
  21788.            in the assembler for grouping arithmetic expressions.  The following 
  21789.            definitions are correct for most assemblers: 
  21790.  
  21791.                       #define ASM_OPEN_PAREN "("
  21792.                       #define ASM_CLOSE_PAREN ")"
  21793.  
  21794.   These macros are provided by `real.h' for writing the definitions of 
  21795.  ASM_OUTPUT_DOUBLE and the like: 
  21796.  
  21797.  REAL_VALUE_TO_TARGET_SINGLE (x, l) 
  21798.  REAL_VALUE_TO_TARGET_DOUBLE (x, l) 
  21799.  REAL_VALUE_TO_TARGET_LONG_DOUBLE (x, l) 
  21800.            These translate x, of type REAL_VALUE_TYPE, to the target's floating 
  21801.            point representation, and store its bit pattern in the array of long 
  21802.            int whose address is l.  The number of elements in the output array 
  21803.            is determined by the size of the desired target floating point data 
  21804.            type: 32 bits of it go in each long int array element.  Each array 
  21805.            element holds 32 bits of the result, even if long int is wider than 
  21806.            32 bits on the host machine. 
  21807.  
  21808.            The array element values are designed so that you can print them out 
  21809.            using fprintf in the order they should appear in the target 
  21810.            machine's memory. 
  21811.  
  21812.  REAL_VALUE_TO_DECIMAL (x, format, string) 
  21813.            This macro converts x, of type REAL_VALUE_TYPE, to a decimal number 
  21814.            and stores it as a string into string. You must pass, as string, the 
  21815.            address of a long enough block of space to hold the result. 
  21816.  
  21817.            The argument format is a printf-specification that serves as a 
  21818.            suggestion for how to format the output string. 
  21819.  
  21820.  
  21821. ΓòÉΓòÉΓòÉ 21.16.3. Output of Uninitialized Variables ΓòÉΓòÉΓòÉ
  21822.  
  21823. Each of the macros in this section is used to do the whole job of outputting a 
  21824. single uninitialized variable. 
  21825.  
  21826.  ASM_OUTPUT_COMMON (stream, name, size, rounded) 
  21827.            A C statement (sans semicolon) to output to the stdio stream stream 
  21828.            the assembler definition of a common-label named name whose size is 
  21829.            size bytes.  The variable rounded is the size rounded up to whatever 
  21830.            alignment the caller wants. 
  21831.  
  21832.            Use the expression assemble_name (stream, name) to output the name 
  21833.            itself; before and after that, output the additional assembler 
  21834.            syntax for defining the name, and a newline. 
  21835.  
  21836.            This macro controls how the assembler definitions of uninitialized 
  21837.            global variables are output. 
  21838.  
  21839.  ASM_OUTPUT_ALIGNED_COMMON (stream, name, size, alignment) 
  21840.            Like ASM_OUTPUT_COMMON except takes the required alignment as a 
  21841.            separate, explicit argument.  If you define this macro, it is used 
  21842.            in place of ASM_OUTPUT_COMMON, and gives you more flexibility in 
  21843.            handling the required alignment of the variable.  The alignment is 
  21844.            specified as the number of bits. 
  21845.  
  21846.  ASM_OUTPUT_SHARED_COMMON (stream, name, size, rounded) 
  21847.            If defined, it is similar to ASM_OUTPUT_COMMON, except that it is 
  21848.            used when name is shared.  If not defined, ASM_OUTPUT_COMMON will be 
  21849.            used. 
  21850.  
  21851.  ASM_OUTPUT_LOCAL (stream, name, size, rounded) 
  21852.            A C statement (sans semicolon) to output to the stdio stream stream 
  21853.            the assembler definition of a local-common-label named name whose 
  21854.            size is size bytes.  The variable rounded is the size rounded up to 
  21855.            whatever alignment the caller wants. 
  21856.  
  21857.            Use the expression assemble_name (stream, name) to output the name 
  21858.            itself; before and after that, output the additional assembler 
  21859.            syntax for defining the name, and a newline. 
  21860.  
  21861.            This macro controls how the assembler definitions of uninitialized 
  21862.            static variables are output. 
  21863.  
  21864.  ASM_OUTPUT_ALIGNED_LOCAL (stream, name, size, alignment) 
  21865.            Like ASM_OUTPUT_LOCAL except takes the required alignment as a 
  21866.            separate, explicit argument.  If you define this macro, it is used 
  21867.            in place of ASM_OUTPUT_LOCAL, and gives you more flexibility in 
  21868.            handling the required alignment of the variable.  The alignment is 
  21869.            specified as the number of bits. 
  21870.  
  21871.  ASM_OUTPUT_SHARED_LOCAL (stream, name, size, rounded) 
  21872.            If defined, it is similar to ASM_OUTPUT_LOCAL, except that it is 
  21873.            used when name is shared.  If not defined, ASM_OUTPUT_LOCAL will be 
  21874.            used. 
  21875.  
  21876.  
  21877. ΓòÉΓòÉΓòÉ 21.16.4. Output and Generation of Labels ΓòÉΓòÉΓòÉ
  21878.  
  21879. This is about outputting labels. 
  21880.  
  21881.  ASM_OUTPUT_LABEL (stream, name) 
  21882.            A C statement (sans semicolon) to output to the stdio stream stream 
  21883.            the assembler definition of a label named name. Use the expression 
  21884.            assemble_name (stream, name) to output the name itself; before and 
  21885.            after that, output the additional assembler syntax for defining the 
  21886.            name, and a newline. 
  21887.  
  21888.  ASM_DECLARE_FUNCTION_NAME (stream, name, decl) 
  21889.            A C statement (sans semicolon) to output to the stdio stream stream 
  21890.            any text necessary for declaring the name name of a function which 
  21891.            is being defined.  This macro is responsible for outputting the 
  21892.            label definition (perhaps using ASM_OUTPUT_LABEL).  The argument 
  21893.            decl is the FUNCTION_DECL tree node representing the function. 
  21894.  
  21895.            If this macro is not defined, then the function name is defined in 
  21896.            the usual manner as a label (by means of ASM_OUTPUT_LABEL). 
  21897.  
  21898.  ASM_DECLARE_FUNCTION_SIZE (stream, name, decl) 
  21899.            A C statement (sans semicolon) to output to the stdio stream stream 
  21900.            any text necessary for declaring the size of a function which is 
  21901.            being defined.  The argument name is the name of the function.  The 
  21902.            argument decl is the FUNCTION_DECL tree node representing the 
  21903.            function. 
  21904.  
  21905.            If this macro is not defined, then the function size is not defined. 
  21906.  
  21907.  ASM_DECLARE_OBJECT_NAME (stream, name, decl) 
  21908.            A C statement (sans semicolon) to output to the stdio stream stream 
  21909.            any text necessary for declaring the name name of an initialized 
  21910.            variable which is being defined.  This macro must output the label 
  21911.            definition (perhaps using ASM_OUTPUT_LABEL).  The argument decl is 
  21912.            the VAR_DECL tree node representing the variable. 
  21913.  
  21914.            If this macro is not defined, then the variable name is defined in 
  21915.            the usual manner as a label (by means of ASM_OUTPUT_LABEL). 
  21916.  
  21917.  ASM_FINISH_DECLARE_OBJECT (stream, decl, toplevel, atend) 
  21918.            A C statement (sans semicolon) to finish up declaring a variable 
  21919.            name once the compiler has processed its initializer fully and thus 
  21920.            has had a chance to determine the size of an array when controlled 
  21921.            by an initializer.  This is used on systems where it's necessary to 
  21922.            declare something about the size of the object. 
  21923.  
  21924.            If you don't define this macro, that is equivalent to defining it to 
  21925.            do nothing. 
  21926.  
  21927.  ASM_GLOBALIZE_LABEL (stream, name) 
  21928.            A C statement (sans semicolon) to output to the stdio stream stream 
  21929.            some commands that will make the label name global; that is, 
  21930.            available for reference from other files.  Use the expression 
  21931.            assemble_name (stream, name) to output the name itself; before and 
  21932.            after that, output the additional assembler syntax for making that 
  21933.            name global, and a newline. 
  21934.  
  21935.  ASM_WEAKEN_LABEL 
  21936.            A C statement (sans semicolon) to output to the stdio stream stream 
  21937.            some commands that will make the label name weak; that is, available 
  21938.            for reference from other files but only used if no other definition 
  21939.            is available.  Use the expression assemble_name (stream, name) to 
  21940.            output the name itself; before and after that, output the additional 
  21941.            assembler syntax for making that name weak, and a newline. 
  21942.  
  21943.            If you don't define this macro, GNU CC will not support weak symbols 
  21944.            and you should not define the SUPPORTS_WEAK macro. 
  21945.  
  21946.  SUPPORTS_WEAK 
  21947.            A C expression which evaluates to true if the target supports weak 
  21948.            symbols. 
  21949.  
  21950.            If you don't define this macro, `defaults.h' provides a default 
  21951.            definition.  If ASM_WEAKEN_LABEL is defined, the default definition 
  21952.            is `1'; otherwise, it is `0'.  Define this macro if you want to 
  21953.            control weak symbol support with a compiler flag such as `-melf'. 
  21954.  
  21955.  ASM_OUTPUT_EXTERNAL (stream, decl, name) 
  21956.            A C statement (sans semicolon) to output to the stdio stream stream 
  21957.            any text necessary for declaring the name of an external symbol 
  21958.            named name which is referenced in this compilation but not defined. 
  21959.            The value of decl is the tree node for the declaration. 
  21960.  
  21961.            This macro need not be defined if it does not need to output 
  21962.            anything. The GNU assembler and most Unix assemblers don't require 
  21963.            anything. 
  21964.  
  21965.  ASM_OUTPUT_EXTERNAL_LIBCALL (stream, symref) 
  21966.            A C statement (sans semicolon) to output on stream an assembler 
  21967.            pseudo-op to declare a library function name external.  The name of 
  21968.            the library function is given by symref, which has type rtx and is a 
  21969.            symbol_ref. 
  21970.  
  21971.            This macro need not be defined if it does not need to output 
  21972.            anything. The GNU assembler and most Unix assemblers don't require 
  21973.            anything. 
  21974.  
  21975.  ASM_OUTPUT_LABELREF (stream, name) 
  21976.            A C statement (sans semicolon) to output to the stdio stream stream 
  21977.            a reference in assembler syntax to a label named name.  This should 
  21978.            add `_' to the front of the name, if that is customary on your 
  21979.            operating system, as it is in most Berkeley Unix systems.  This 
  21980.            macro is used in assemble_name. 
  21981.  
  21982.  ASM_OUTPUT_INTERNAL_LABEL (stream, prefix, num) 
  21983.            A C statement to output to the stdio stream stream a label whose 
  21984.            name is made from the string prefix and the number num. 
  21985.  
  21986.            It is absolutely essential that these labels be distinct from the 
  21987.            labels used for user-level functions and variables.  Otherwise, 
  21988.            certain programs will have name conflicts with internal labels. 
  21989.  
  21990.            It is desirable to exclude internal labels from the symbol table of 
  21991.            the object file.  Most assemblers have a naming convention for 
  21992.            labels that should be excluded; on many systems, the letter `L' at 
  21993.            the beginning of a label has this effect.  You should find out what 
  21994.            convention your system uses, and follow it. 
  21995.  
  21996.            The usual definition of this macro is as follows: 
  21997.  
  21998.                       fprintf (stream, "L%s%d:\n", prefix, num)
  21999.  
  22000.  ASM_GENERATE_INTERNAL_LABEL (string, prefix, num) 
  22001.            A C statement to store into the string string a label whose name is 
  22002.            made from the string prefix and the number num. 
  22003.  
  22004.            This string, when output subsequently by assemble_name, should 
  22005.            produce the output that ASM_OUTPUT_INTERNAL_LABEL would produce with 
  22006.            the same prefix and num. 
  22007.  
  22008.            If the string begins with `*', then assemble_name will output the 
  22009.            rest of the string unchanged.  It is often convenient for 
  22010.            ASM_GENERATE_INTERNAL_LABEL to use `*' in this way.  If the string 
  22011.            doesn't start with `*', then ASM_OUTPUT_LABELREF gets to output the 
  22012.            string, and may change it.  (Of course, ASM_OUTPUT_LABELREF is also 
  22013.            part of your machine description, so you should know what it does on 
  22014.            your machine.) 
  22015.  
  22016.  ASM_FORMAT_PRIVATE_NAME (outvar, name, number) 
  22017.            A C expression to assign to outvar (which is a variable of type char 
  22018.            *) a newly allocated string made from the string name and the number 
  22019.            number, with some suitable punctuation added.  Use alloca to get 
  22020.            space for the string. 
  22021.  
  22022.            The string will be used as an argument to ASM_OUTPUT_LABELREF to 
  22023.            produce an assembler label for an internal static variable whose 
  22024.            name is name.  Therefore, the string must be such as to result in 
  22025.            valid assembler code.  The argument number is different each time 
  22026.            this macro is executed; it prevents conflicts between 
  22027.            similarly-named internal static variables in different scopes. 
  22028.  
  22029.            Ideally this string should not be a valid C identifier, to prevent 
  22030.            any conflict with the user's own symbols.  Most assemblers allow 
  22031.            periods or percent signs in assembler symbols; putting at least one 
  22032.            of these between the name and the number will suffice. 
  22033.  
  22034.  ASM_OUTPUT_DEF (stream, name, value) 
  22035.            A C statement to output to the stdio stream stream assembler code 
  22036.            which defines (equates) the symbol name to have the value value. 
  22037.  
  22038.            If SET_ASM_OP is defined, a default definition is provided which is 
  22039.            correct for most systems. 
  22040.  
  22041.  OBJC_GEN_METHOD_LABEL (buf, is_inst, class_name, cat_name, sel_name) 
  22042.            Define this macro to override the default assembler names used for 
  22043.            Objective C methods. 
  22044.  
  22045.            The default name is a unique method number followed by the name of 
  22046.            the class (e.g. `_1_Foo').  For methods in categories, the name of 
  22047.            the category is also included in the assembler name (e.g. 
  22048.            `_1_Foo_Bar'). 
  22049.  
  22050.            These names are safe on most systems, but make debugging difficult 
  22051.            since the method's selector is not present in the name.  Therefore, 
  22052.            particular systems define other ways of computing names. 
  22053.  
  22054.            buf is an expression of type char * which gives you a buffer in 
  22055.            which to store the name; its length is as long as class_name, 
  22056.            cat_name and sel_name put together, plus 50 characters extra. 
  22057.  
  22058.            The argument is_inst specifies whether the method is an instance 
  22059.            method or a class method; class_name is the name of the class; 
  22060.            cat_name is the name of the category (or NULL if the method is not 
  22061.            in a category); and sel_name is the name of the selector. 
  22062.  
  22063.            On systems where the assembler can handle quoted names, you can use 
  22064.            this macro to provide more human-readable names. 
  22065.  
  22066.  
  22067. ΓòÉΓòÉΓòÉ 21.16.5. How Initialization Functions Are Handled ΓòÉΓòÉΓòÉ
  22068.  
  22069. The compiled code for certain languages includes constructors (also called 
  22070. initialization routines)---functions to initialize data in the program when the 
  22071. program is started.  These functions need to be called before the program is 
  22072. ``started''---that is to say, before main is called. 
  22073.  
  22074. Compiling some languages generates destructors (also called termination 
  22075. routines) that should be called when the program terminates. 
  22076.  
  22077. To make the initialization and termination functions work, the compiler must 
  22078. output something in the assembler code to cause those functions to be called at 
  22079. the appropriate time.  When you port the compiler to a new system, you need to 
  22080. specify how to do this. 
  22081.  
  22082. There are two major ways that GCC currently supports the execution of 
  22083. initialization and termination functions.  Each way has two variants. Much of 
  22084. the structure is common to all four variations. 
  22085.  
  22086. The linker must build two lists of these functions---a list of initialization 
  22087. functions, called __CTOR_LIST__, and a list of termination functions, called 
  22088. __DTOR_LIST__. 
  22089.  
  22090. Each list always begins with an ignored function pointer (which may hold 0, -1, 
  22091. or a count of the function pointers after it, depending on the environment). 
  22092. This is followed by a series of zero or more function pointers to constructors 
  22093. (or destructors), followed by a function pointer containing zero. 
  22094.  
  22095. Depending on the operating system and its executable file format, either 
  22096. `crtstuff.c' or `libgcc2.c' traverses these lists at startup time and exit 
  22097. time.  Constructors are called in reverse order of the list; destructors in 
  22098. forward order. 
  22099.  
  22100. The best way to handle static constructors works only for object file formats 
  22101. which provide arbitrarily-named sections.  A section is set aside for a list of 
  22102. constructors, and another for a list of destructors. Traditionally these are 
  22103. called `.ctors' and `.dtors'.  Each object file that defines an initialization 
  22104. function also puts a word in the constructor section to point to that function. 
  22105. The linker accumulates all these words into one contiguous `.ctors' section. 
  22106. Termination functions are handled similarly. 
  22107.  
  22108. To use this method, you need appropriate definitions of the macros 
  22109. ASM_OUTPUT_CONSTRUCTOR and ASM_OUTPUT_DESTRUCTOR.  Usually you can get them by 
  22110. including `svr4.h'. 
  22111.  
  22112. When arbitrary sections are available, there are two variants, depending upon 
  22113. how the code in `crtstuff.c' is called.  On systems that support an init 
  22114. section which is executed at program startup, parts of `crtstuff.c' are 
  22115. compiled into that section.  The program is linked by the gcc driver like this: 
  22116.  
  22117. ld -o output_file crtbegin.o ... crtend.o -lgcc
  22118.  
  22119. The head of a function (__do_global_ctors) appears in the init section of 
  22120. `crtbegin.o'; the remainder of the function appears in the init section of 
  22121. `crtend.o'.  The linker will pull these two parts of the section together, 
  22122. making a whole function.  If any of the user's object files linked into the 
  22123. middle of it contribute code, then that code will be executed as part of the 
  22124. body of __do_global_ctors. 
  22125.  
  22126. To use this variant, you must define the INIT_SECTION_ASM_OP macro properly. 
  22127.  
  22128. If no init section is available, do not define INIT_SECTION_ASM_OP.  Then 
  22129. __do_global_ctors is built into the text section like all other functions, and 
  22130. resides in `libgcc.a'.  When GCC compiles any function called main, it inserts 
  22131. a procedure call to __main as the first executable code after the function 
  22132. prologue.  The __main function, also defined in `libgcc2.c', simply calls 
  22133. `__do_global_ctors'. 
  22134.  
  22135. In file formats that don't support arbitrary sections, there are again two 
  22136. variants.  In the simplest variant, the GNU linker (GNU ld) and an `a.out' 
  22137. format must be used.  In this case, ASM_OUTPUT_CONSTRUCTOR is defined to 
  22138. produce a .stabs entry of type `N_SETT', referencing the name __CTOR_LIST__, 
  22139. and with the address of the void function containing the initialization code as 
  22140. its value.  The GNU linker recognizes this as a request to add the value to a 
  22141. ``set''; the values are accumulated, and are eventually placed in the 
  22142. executable as a vector in the format described above, with a leading (ignored) 
  22143. count and a trailing zero element. ASM_OUTPUT_DESTRUCTOR is handled similarly. 
  22144. Since no init section is available, the absence of INIT_SECTION_ASM_OP causes 
  22145. the compilation of main to call __main as above, starting the initialization 
  22146. process. 
  22147.  
  22148. The last variant uses neither arbitrary sections nor the GNU linker. This is 
  22149. preferable when you want to do dynamic linking and when using file formats 
  22150. which the GNU linker does not support, such as `ECOFF'.  In this case, 
  22151. ASM_OUTPUT_CONSTRUCTOR does not produce an N_SETT symbol; initialization and 
  22152. termination functions are recognized simply by their names.  This requires an 
  22153. extra program in the linkage step, called collect2.  This program pretends to 
  22154. be the linker, for use with GNU CC; it does its job by running the ordinary 
  22155. linker, but also arranges to include the vectors of initialization and 
  22156. termination functions.  These functions are called via __main as described 
  22157. above. 
  22158.  
  22159. Choosing among these configuration options has been simplified by a set of 
  22160. operating-system-dependent files in the `config' subdirectory. These files 
  22161. define all of the relevant parameters.  Usually it is sufficient to include one 
  22162. into your specific machine-dependent configuration file.  These files are: 
  22163.  
  22164.  `aoutos.h' 
  22165.            For operating systems using the `a.out' format. 
  22166.  
  22167.  `next.h' 
  22168.            For operating systems using the `MachO' format. 
  22169.  
  22170.  `svr3.h' 
  22171.            For System V Release 3 and similar systems using `COFF' format. 
  22172.  
  22173.  `svr4.h' 
  22174.            For System V Release 4 and similar systems using `ELF' format. 
  22175.  
  22176.  `vms.h' 
  22177.            For the VMS operating system. 
  22178.  
  22179.  The following section describes the specific macros that control and customize 
  22180.  the handling of initialization and termination functions. 
  22181.  
  22182.  
  22183. ΓòÉΓòÉΓòÉ 21.16.6. Macros Controlling Initialization Routines ΓòÉΓòÉΓòÉ
  22184.  
  22185. Here are the macros that control how the compiler handles initialization and 
  22186. termination functions: 
  22187.  
  22188.  INIT_SECTION_ASM_OP 
  22189.            If defined, a C string constant for the assembler operation to 
  22190.            identify the following data as initialization code.  If not defined, 
  22191.            GNU CC will assume such a section does not exist.  When you are 
  22192.            using special sections for initialization and termination functions, 
  22193.            this macro also controls how `crtstuff.c' and `libgcc2.c' arrange to 
  22194.            run the initialization functions. 
  22195.  
  22196.  HAS_INIT_SECTION 
  22197.            If defined, main will not call __main as described above. This macro 
  22198.            should be defined for systems that control the contents of the init 
  22199.            section on a symbol-by-symbol basis, such as OSF/1, and should not 
  22200.            be defined explicitly for systems that support INIT_SECTION_ASM_OP. 
  22201.  
  22202.  LD_INIT_SWITCH 
  22203.            If defined, a C string constant for a switch that tells the linker 
  22204.            that the following symbol is an initialization routine. 
  22205.  
  22206.  LD_FINI_SWITCH 
  22207.            If defined, a C string constant for a switch that tells the linker 
  22208.            that the following symbol is a finalization routine. 
  22209.  
  22210.  INVOKE__main 
  22211.            If defined, main will call __main despite the presence of 
  22212.            INIT_SECTION_ASM_OP.  This macro should be defined for systems where 
  22213.            the init section is not actually run automatically, but is still 
  22214.            useful for collecting the lists of constructors and destructors. 
  22215.  
  22216.  ASM_OUTPUT_CONSTRUCTOR (stream, name) 
  22217.            Define this macro as a C statement to output on the stream stream 
  22218.            the assembler code to arrange to call the function named name at 
  22219.            initialization time. 
  22220.  
  22221.            Assume that name is the name of a C function generated automatically 
  22222.            by the compiler.  This function takes no arguments.  Use the 
  22223.            function assemble_name to output the name name; this performs any 
  22224.            system-specific syntactic transformations such as adding an 
  22225.            underscore. 
  22226.  
  22227.            If you don't define this macro, nothing special is output to arrange 
  22228.            to call the function.  This is correct when the function will be 
  22229.            called in some other manner---for example, by means of the collect2 
  22230.            program, which looks through the symbol table to find these 
  22231.            functions by their names. 
  22232.  
  22233.  ASM_OUTPUT_DESTRUCTOR (stream, name) 
  22234.            This is like ASM_OUTPUT_CONSTRUCTOR but used for termination 
  22235.            functions rather than initialization functions. 
  22236.  
  22237.  If your system uses collect2 as the means of processing constructors, then 
  22238.  that program normally uses nm to scan an object file for constructor functions 
  22239.  to be called.  On certain kinds of systems, you can define these macros to 
  22240.  make collect2 work faster (and, in some cases, make it work at all): 
  22241.  
  22242.  OBJECT_FORMAT_COFF 
  22243.            Define this macro if the system uses COFF (Common Object File 
  22244.            Format) object files, so that collect2 can assume this format and 
  22245.            scan object files directly for dynamic constructor/destructor 
  22246.            functions. 
  22247.  
  22248.  OBJECT_FORMAT_ROSE 
  22249.            Define this macro if the system uses ROSE format object files, so 
  22250.            that collect2 can assume this format and scan object files directly 
  22251.            for dynamic constructor/destructor functions. 
  22252.  
  22253.            These macros are effective only in a native compiler; collect2 as 
  22254.            part of a cross compiler always uses nm for the target machine. 
  22255.  
  22256.  REAL_NM_FILE_NAME 
  22257.            Define this macro as a C string constant containing the file name to 
  22258.            use to execute nm.  The default is to search the path normally for 
  22259.            nm. 
  22260.  
  22261.            If your system supports shared libraries and has a program to list 
  22262.            the dynamic dependencies of a given library or executable, you can 
  22263.            define these macros to enable support for running initialization and 
  22264.            termination functions in shared libraries: 
  22265.  
  22266.  LDD_SUFFIX 
  22267.            Define this macro to a C string constant containing the name of the 
  22268.            program which lists dynamic dependencies, like "ldd" under SunOS 4. 
  22269.  
  22270.  PARSE_LDD_OUTPUT (PTR) 
  22271.            Define this macro to be C code that extracts filenames from the 
  22272.            output of the program denoted by LDD_SUFFIX.  PTR is a variable of 
  22273.            type char * that points to the beginning of a line of output from 
  22274.            LDD_SUFFIX.  If the line lists a dynamic dependency, the code must 
  22275.            advance PTR to the beginning of the filename on that line. 
  22276.            Otherwise, it must set PTR to NULL. 
  22277.  
  22278.  
  22279. ΓòÉΓòÉΓòÉ 21.16.7. Output of Assembler Instructions ΓòÉΓòÉΓòÉ
  22280.  
  22281. This describes assembler instruction output. 
  22282.  
  22283.  REGISTER_NAMES 
  22284.            A C initializer containing the assembler's names for the machine 
  22285.            registers, each one as a C string constant.  This is what translates 
  22286.            register numbers in the compiler into assembler language. 
  22287.  
  22288.  ADDITIONAL_REGISTER_NAMES 
  22289.            If defined, a C initializer for an array of structures containing a 
  22290.            name and a register number.  This macro defines additional names for 
  22291.            hard registers, thus allowing the asm option in declarations to 
  22292.            refer to registers using alternate names. 
  22293.  
  22294.  ASM_OUTPUT_OPCODE (stream, ptr) 
  22295.            Define this macro if you are using an unusual assembler that 
  22296.            requires different names for the machine instructions. 
  22297.  
  22298.            The definition is a C statement or statements which output an 
  22299.            assembler instruction opcode to the stdio stream stream.  The 
  22300.            macro-operand ptr is a variable of type char * which points to the 
  22301.            opcode name in its ``internal'' form---the form that is written in 
  22302.            the machine description.  The definition should output the opcode 
  22303.            name to stream, performing any translation you desire, and increment 
  22304.            the variable ptr to point at the end of the opcode so that it will 
  22305.            not be output twice. 
  22306.  
  22307.            In fact, your macro definition may process less than the entire 
  22308.            opcode name, or more than the opcode name; but if you want to 
  22309.            process text that includes `%'-sequences to substitute operands, you 
  22310.            must take care of the substitution yourself.  Just be sure to 
  22311.            increment ptr over whatever text should not be output normally. 
  22312.  
  22313.            If you need to look at the operand values, they can be found as the 
  22314.            elements of recog_operand. 
  22315.  
  22316.            If the macro definition does nothing, the instruction is output in 
  22317.            the usual way. 
  22318.  
  22319.  FINAL_PRESCAN_INSN (insn, opvec, noperands) 
  22320.            If defined, a C statement to be executed just prior to the output of 
  22321.            assembler code for insn, to modify the extracted operands so they 
  22322.            will be output differently. 
  22323.  
  22324.            Here the argument opvec is the vector containing the operands 
  22325.            extracted from insn, and noperands is the number of elements of the 
  22326.            vector which contain meaningful data for this insn. The contents of 
  22327.            this vector are what will be used to convert the insn template into 
  22328.            assembler code, so you can change the assembler output by changing 
  22329.            the contents of the vector. 
  22330.  
  22331.            This macro is useful when various assembler syntaxes share a single 
  22332.            file of instruction patterns; by defining this macro differently, 
  22333.            you can cause a large class of instructions to be output differently 
  22334.            (such as with rearranged operands).  Naturally, variations in 
  22335.            assembler syntax affecting individual insn patterns ought to be 
  22336.            handled by writing conditional output routines in those patterns. 
  22337.  
  22338.            If this macro is not defined, it is equivalent to a null statement. 
  22339.  
  22340.  PRINT_OPERAND (stream, x, code) 
  22341.            A C compound statement to output to stdio stream stream the 
  22342.            assembler syntax for an instruction operand x.  x is an RTL 
  22343.            expression. 
  22344.  
  22345.            code is a value that can be used to specify one of several ways of 
  22346.            printing the operand.  It is used when identical operands must be 
  22347.            printed differently depending on the context.  code comes from the 
  22348.            `%' specification that was used to request printing of the operand. 
  22349.            If the specification was just `%digit' then code is 0; if the 
  22350.            specification was `%ltr digit' then code is the ASCII code for ltr. 
  22351.  
  22352.            If x is a register, this macro should print the register's name. The 
  22353.            names can be found in an array reg_names whose type is char *[]. 
  22354.            reg_names is initialized from REGISTER_NAMES. 
  22355.  
  22356.            When the machine description has a specification `%punct' (a `%' 
  22357.            followed by a punctuation character), this macro is called with a 
  22358.            null pointer for x and the punctuation character for code. 
  22359.  
  22360.  PRINT_OPERAND_PUNCT_VALID_P (code) 
  22361.            A C expression which evaluates to true if code is a valid 
  22362.            punctuation character for use in the PRINT_OPERAND macro.  If 
  22363.            PRINT_OPERAND_PUNCT_VALID_P is not defined, it means that no 
  22364.            punctuation characters (except for the standard one, `%') are used 
  22365.            in this way. 
  22366.  
  22367.  PRINT_OPERAND_ADDRESS (stream, x) 
  22368.            A C compound statement to output to stdio stream stream the 
  22369.            assembler syntax for an instruction operand that is a memory 
  22370.            reference whose address is x.  x is an RTL expression. 
  22371.  
  22372.            On some machines, the syntax for a symbolic address depends on the 
  22373.            section that the address refers to.  On these machines, define the 
  22374.            macro ENCODE_SECTION_INFO to store the information into the 
  22375.            symbol_ref, and then check for it here.  See Assembler Format. 
  22376.  
  22377.  DBR_OUTPUT_SEQEND(file) 
  22378.            A C statement, to be executed after all slot-filler instructions 
  22379.            have been output.  If necessary, call dbr_sequence_length to 
  22380.            determine the number of slots filled in a sequence (zero if not 
  22381.            currently outputting a sequence), to decide how many no-ops to 
  22382.            output, or whatever. 
  22383.  
  22384.            Don't define this macro if it has nothing to do, but it is helpful 
  22385.            in reading assembly output if the extent of the delay sequence is 
  22386.            made explicit (e.g. with white space). 
  22387.  
  22388.            Note that output routines for instructions with delay slots must be 
  22389.            prepared to deal with not being output as part of a sequence (i.e. 
  22390.            when the scheduling pass is not run, or when no slot fillers could 
  22391.            be found.)  The variable final_sequence is null when not processing 
  22392.            a sequence, otherwise it contains the sequence rtx being output. 
  22393.  
  22394.  REGISTER_PREFIX 
  22395.  LOCAL_LABEL_PREFIX 
  22396.  USER_LABEL_PREFIX 
  22397.  IMMEDIATE_PREFIX 
  22398.            If defined, C string expressions to be used for the `%R', `%L', 
  22399.            `%U', and `%I' options of asm_fprintf (see `final.c').  These are 
  22400.            useful when a single `md' file must support multiple assembler 
  22401.            formats.  In that case, the various `tm.h' files can define these 
  22402.            macros differently. 
  22403.  
  22404.  ASSEMBLER_DIALECT 
  22405.            If your target supports multiple dialects of assembler language 
  22406.            (such as different opcodes), define this macro as a C expression 
  22407.            that gives the numeric index of the assembler language dialect to 
  22408.            use, with zero as the first variant. 
  22409.  
  22410.            If this macro is defined, you may use `{option0|option1|option2...}' 
  22411.            constructs in the output templates of patterns (see Output Template) 
  22412.            or in the first argument of asm_fprintf.  This construct outputs 
  22413.            `option0', `option1' or `option2', etc., if the value of 
  22414.            ASSEMBLER_DIALECT is zero, one or two, etc.  Any special characters 
  22415.            within these strings retain their usual meaning. 
  22416.  
  22417.            If you do not define this macro, the characters `{', `|' and `}' do 
  22418.            not have any special meaning when used in templates or operands to 
  22419.            asm_fprintf. 
  22420.  
  22421.            Define the macros REGISTER_PREFIX, LOCAL_LABEL_PREFIX, 
  22422.            USER_LABEL_PREFIX and IMMEDIATE_PREFIX if you can express the 
  22423.            variations in assemble language syntax with that mechanism.  Define 
  22424.            ASSEMBLER_DIALECT and use the `{option0|option1}' syntax if the 
  22425.            syntax variant are larger and involve such things as different 
  22426.            opcodes or operand order. 
  22427.  
  22428.  ASM_OUTPUT_REG_PUSH (stream, regno) 
  22429.            A C expression to output to stream some assembler code which will 
  22430.            push hard register number regno onto the stack. The code need not be 
  22431.            optimal, since this macro is used only when profiling. 
  22432.  
  22433.  ASM_OUTPUT_REG_POP (stream, regno) 
  22434.            A C expression to output to stream some assembler code which will 
  22435.            pop hard register number regno off of the stack. The code need not 
  22436.            be optimal, since this macro is used only when profiling. 
  22437.  
  22438.  
  22439. ΓòÉΓòÉΓòÉ 21.16.8. Output of Dispatch Tables ΓòÉΓòÉΓòÉ
  22440.  
  22441. This concerns dispatch tables. 
  22442.  
  22443.  ASM_OUTPUT_ADDR_DIFF_ELT (stream, value, rel) 
  22444.            This macro should be provided on machines where the addresses in a 
  22445.            dispatch table are relative to the table's own address. 
  22446.  
  22447.            The definition should be a C statement to output to the stdio stream 
  22448.            stream an assembler pseudo-instruction to generate a difference 
  22449.            between two labels.  value and rel are the numbers of two internal 
  22450.            labels.  The definitions of these labels are output using 
  22451.            ASM_OUTPUT_INTERNAL_LABEL, and they must be printed in the same way 
  22452.            here.  For example, 
  22453.  
  22454.                       fprintf (stream, "\t.word L%d-L%d\n",
  22455.                                value, rel)
  22456.  
  22457.  ASM_OUTPUT_ADDR_VEC_ELT (stream, value) 
  22458.            This macro should be provided on machines where the addresses in a 
  22459.            dispatch table are absolute. 
  22460.  
  22461.            The definition should be a C statement to output to the stdio stream 
  22462.            stream an assembler pseudo-instruction to generate a reference to a 
  22463.            label.  value is the number of an internal label whose definition is 
  22464.            output using ASM_OUTPUT_INTERNAL_LABEL. For example, 
  22465.  
  22466.                       fprintf (stream, "\t.word L%d\n", value)
  22467.  
  22468.  ASM_OUTPUT_CASE_LABEL (stream, prefix, num, table) 
  22469.            Define this if the label before a jump-table needs to be output 
  22470.            specially.  The first three arguments are the same as for 
  22471.            ASM_OUTPUT_INTERNAL_LABEL; the fourth argument is the jump-table 
  22472.            which follows (a jump_insn containing an addr_vec or addr_diff_vec). 
  22473.  
  22474.            This feature is used on system V to output a swbeg statement for the 
  22475.            table. 
  22476.  
  22477.            If this macro is not defined, these labels are output with 
  22478.            ASM_OUTPUT_INTERNAL_LABEL. 
  22479.  
  22480.  ASM_OUTPUT_CASE_END (stream, num, table) 
  22481.            Define this if something special must be output at the end of a 
  22482.            jump-table.  The definition should be a C statement to be executed 
  22483.            after the assembler code for the table is written.  It should write 
  22484.            the appropriate code to stdio stream stream.  The argument table is 
  22485.            the jump-table insn, and num is the label-number of the preceding 
  22486.            label. 
  22487.  
  22488.            If this macro is not defined, nothing special is output at the end 
  22489.            of the jump-table. 
  22490.  
  22491.  
  22492. ΓòÉΓòÉΓòÉ 21.16.9. Assembler Commands for Alignment ΓòÉΓòÉΓòÉ
  22493.  
  22494. This describes commands for alignment. 
  22495.  
  22496.  ASM_OUTPUT_ALIGN_CODE (file) 
  22497.            A C expression to output text to align the location counter in the 
  22498.            way that is desirable at a point in the code that is reached only by 
  22499.            jumping. 
  22500.  
  22501.            This macro need not be defined if you don't want any special 
  22502.            alignment to be done at such a time.  Most machine descriptions do 
  22503.            not currently define the macro. 
  22504.  
  22505.  ASM_OUTPUT_LOOP_ALIGN (file) 
  22506.            A C expression to output text to align the location counter in the 
  22507.            way that is desirable at the beginning of a loop. 
  22508.  
  22509.            This macro need not be defined if you don't want any special 
  22510.            alignment to be done at such a time.  Most machine descriptions do 
  22511.            not currently define the macro. 
  22512.  
  22513.  ASM_OUTPUT_SKIP (stream, nbytes) 
  22514.            A C statement to output to the stdio stream stream an assembler 
  22515.            instruction to advance the location counter by nbytes bytes. Those 
  22516.            bytes should be zero when loaded.  nbytes will be a C expression of 
  22517.            type int. 
  22518.  
  22519.  ASM_NO_SKIP_IN_TEXT 
  22520.            Define this macro if ASM_OUTPUT_SKIP should not be used in the text 
  22521.            section because it fails put zeros in the bytes that are skipped. 
  22522.            This is true on many Unix systems, where the pseudo--op to skip 
  22523.            bytes produces no-op instructions rather than zeros when used in the 
  22524.            text section. 
  22525.  
  22526.  ASM_OUTPUT_ALIGN (stream, power) 
  22527.            A C statement to output to the stdio stream stream an assembler 
  22528.            command to advance the location counter to a multiple of 2 to the 
  22529.            power bytes.  power will be a C expression of type int. 
  22530.  
  22531.  
  22532. ΓòÉΓòÉΓòÉ 21.17. Controlling Debugging Information Format ΓòÉΓòÉΓòÉ
  22533.  
  22534. This describes how to specify debugging information. 
  22535.  
  22536.  All Debuggers                           Macros that affect all debugging 
  22537.                                          formats uniformly. 
  22538.  DBX Options                             Macros enabling specific options in 
  22539.                                          DBX format. 
  22540.  DBX Hooks                               Hook macros for varying DBX format. 
  22541.  File Names and DBX                      Macros controlling output of file 
  22542.                                          names in DBX format. 
  22543.  SDB and DWARF                           Macros for SDB (COFF) and DWARF 
  22544.                                          formats. 
  22545.  
  22546.  
  22547. ΓòÉΓòÉΓòÉ 21.17.1. Macros Affecting All Debugging Formats ΓòÉΓòÉΓòÉ
  22548.  
  22549. These macros affect all debugging formats. 
  22550.  
  22551.  DBX_REGISTER_NUMBER (regno) 
  22552.            A C expression that returns the DBX register number for the compiler 
  22553.            register number regno.  In simple cases, the value of this 
  22554.            expression may be regno itself.  But sometimes there are some 
  22555.            registers that the compiler knows about and DBX does not, or vice 
  22556.            versa.  In such cases, some register may need to have one number in 
  22557.            the compiler and another for DBX. 
  22558.  
  22559.            If two registers have consecutive numbers inside GNU CC, and they 
  22560.            can be used as a pair to hold a multiword value, then they must have 
  22561.            consecutive numbers after renumbering with DBX_REGISTER_NUMBER. 
  22562.            Otherwise, debuggers will be unable to access such a pair, because 
  22563.            they expect register pairs to be consecutive in their own numbering 
  22564.            scheme. 
  22565.  
  22566.            If you find yourself defining DBX_REGISTER_NUMBER in way that does 
  22567.            not preserve register pairs, then what you must do instead is 
  22568.            redefine the actual register numbering scheme. 
  22569.  
  22570.  DEBUGGER_AUTO_OFFSET (x) 
  22571.            A C expression that returns the integer offset value for an 
  22572.            automatic variable having address x (an RTL expression).  The 
  22573.            default computation assumes that x is based on the frame-pointer and 
  22574.            gives the offset from the frame-pointer.  This is required for 
  22575.            targets that produce debugging output for DBX or COFF-style 
  22576.            debugging output for SDB and allow the frame-pointer to be 
  22577.            eliminated when the `-g' options is used. 
  22578.  
  22579.  DEBUGGER_ARG_OFFSET (offset, x) 
  22580.            A C expression that returns the integer offset value for an argument 
  22581.            having address x (an RTL expression).  The nominal offset is offset. 
  22582.  
  22583.  PREFERRED_DEBUGGING_TYPE 
  22584.            A C expression that returns the type of debugging output GNU CC 
  22585.            produces when the user specifies `-g' or `-ggdb'.  Define this if 
  22586.            you have arranged for GNU CC to support more than one format of 
  22587.            debugging output.  Currently, the allowable values are DBX_DEBUG, 
  22588.            SDB_DEBUG, DWARF_DEBUG, and XCOFF_DEBUG. 
  22589.  
  22590.            The value of this macro only affects the default debugging output; 
  22591.            the user can always get a specific type of output by using 
  22592.            `-gstabs', `-gcoff', `-gdwarf', or `-gxcoff'. 
  22593.  
  22594.  
  22595. ΓòÉΓòÉΓòÉ 21.17.2. Specific Options for DBX Output ΓòÉΓòÉΓòÉ
  22596.  
  22597. These are specific options for DBX output. 
  22598.  
  22599.  DBX_DEBUGGING_INFO 
  22600.            Define this macro if GNU CC should produce debugging output for DBX 
  22601.            in response to the `-g' option. 
  22602.  
  22603.  XCOFF_DEBUGGING_INFO 
  22604.            Define this macro if GNU CC should produce XCOFF format debugging 
  22605.            output in response to the `-g' option.  This is a variant of DBX 
  22606.            format. 
  22607.  
  22608.  DEFAULT_GDB_EXTENSIONS 
  22609.            Define this macro to control whether GNU CC should by default 
  22610.            generate GDB's extended version of DBX debugging information 
  22611.            (assuming DBX-format debugging information is enabled at all).  If 
  22612.            you don't define the macro, the default is 1: always generate the 
  22613.            extended information if there is any occasion to. 
  22614.  
  22615.  DEBUG_SYMS_TEXT 
  22616.            Define this macro if all .stabs commands should be output while in 
  22617.            the text section. 
  22618.  
  22619.  ASM_STABS_OP 
  22620.            A C string constant naming the assembler pseudo op to use instead of 
  22621.            .stabs to define an ordinary debugging symbol.  If you don't define 
  22622.            this macro, .stabs is used.  This macro applies only to DBX 
  22623.            debugging information format. 
  22624.  
  22625.  ASM_STABD_OP 
  22626.            A C string constant naming the assembler pseudo op to use instead of 
  22627.            .stabd to define a debugging symbol whose value is the current 
  22628.            location.  If you don't define this macro, .stabd is used. This 
  22629.            macro applies only to DBX debugging information format. 
  22630.  
  22631.  ASM_STABN_OP 
  22632.            A C string constant naming the assembler pseudo op to use instead of 
  22633.            .stabn to define a debugging symbol with no name.  If you don't 
  22634.            define this macro, .stabn is used.  This macro applies only to DBX 
  22635.            debugging information format. 
  22636.  
  22637.  DBX_NO_XREFS 
  22638.            Define this macro if DBX on your system does not support the 
  22639.            construct `xstagname'.  On some systems, this construct is used to 
  22640.            describe a forward reference to a structure named tagname. On other 
  22641.            systems, this construct is not supported at all. 
  22642.  
  22643.  DBX_CONTIN_LENGTH 
  22644.            A symbol name in DBX-format debugging information is normally 
  22645.            continued (split into two separate .stabs directives) when it 
  22646.            exceeds a certain length (by default, 80 characters).  On some 
  22647.            operating systems, DBX requires this splitting; on others, splitting 
  22648.            must not be done.  You can inhibit splitting by defining this macro 
  22649.            with the value zero.  You can override the default splitting-length 
  22650.            by defining this macro as an expression for the length you desire. 
  22651.  
  22652.  DBX_CONTIN_CHAR 
  22653.            Normally continuation is indicated by adding a `\' character to the 
  22654.            end of a .stabs string when a continuation follows.  To use a 
  22655.            different character instead, define this macro as a character 
  22656.            constant for the character you want to use.  Do not define this 
  22657.            macro if backslash is correct for your system. 
  22658.  
  22659.  DBX_STATIC_STAB_DATA_SECTION 
  22660.            Define this macro if it is necessary to go to the data section 
  22661.            before outputting the `.stabs' pseudo-op for a non-global static 
  22662.            variable. 
  22663.  
  22664.  DBX_TYPE_DECL_STABS_CODE 
  22665.            The value to use in the ``code'' field of the .stabs directive for a 
  22666.            typedef.  The default is N_LSYM. 
  22667.  
  22668.  DBX_STATIC_CONST_VAR_CODE 
  22669.            The value to use in the ``code'' field of the .stabs directive for a 
  22670.            static variable located in the text section.  DBX format does not 
  22671.            provide any ``right'' way to do this.  The default is N_FUN. 
  22672.  
  22673.  DBX_REGPARM_STABS_CODE 
  22674.            The value to use in the ``code'' field of the .stabs directive for a 
  22675.            parameter passed in registers.  DBX format does not provide any 
  22676.            ``right'' way to do this.  The default is N_RSYM. 
  22677.  
  22678.  DBX_REGPARM_STABS_LETTER 
  22679.            The letter to use in DBX symbol data to identify a symbol as a 
  22680.            parameter passed in registers.  DBX format does not customarily 
  22681.            provide any way to do this.  The default is 'P'. 
  22682.  
  22683.  DBX_MEMPARM_STABS_LETTER 
  22684.            The letter to use in DBX symbol data to identify a symbol as a stack 
  22685.            parameter.  The default is 'p'. 
  22686.  
  22687.  DBX_FUNCTION_FIRST 
  22688.            Define this macro if the DBX information for a function and its 
  22689.            arguments should precede the assembler code for the function. 
  22690.            Normally, in DBX format, the debugging information entirely follows 
  22691.            the assembler code. 
  22692.  
  22693.  DBX_LBRAC_FIRST 
  22694.            Define this macro if the N_LBRAC symbol for a block should precede 
  22695.            the debugging information for variables and functions defined in 
  22696.            that block.  Normally, in DBX format, the N_LBRAC symbol comes 
  22697.            first. 
  22698.  
  22699.  DBX_BLOCKS_FUNCTION_RELATIVE 
  22700.            Define this macro if the value of a symbol describing the scope of a 
  22701.            block (N_LBRAC or N_RBRAC) should be relative to the start of the 
  22702.            enclosing function.  Normally, GNU C uses an absolute address. 
  22703.  
  22704.  
  22705. ΓòÉΓòÉΓòÉ 21.17.3. Open-Ended Hooks for DBX Format ΓòÉΓòÉΓòÉ
  22706.  
  22707. These are hooks for DBX format. 
  22708.  
  22709.  DBX_OUTPUT_LBRAC (stream, name) 
  22710.            Define this macro to say how to output to stream the debugging 
  22711.            information for the start of a scope level for variable names.  The 
  22712.            argument name is the name of an assembler symbol (for use with 
  22713.            assemble_name) whose value is the address where the scope begins. 
  22714.  
  22715.  DBX_OUTPUT_RBRAC (stream, name) 
  22716.            Like DBX_OUTPUT_LBRAC, but for the end of a scope level. 
  22717.  
  22718.  DBX_OUTPUT_ENUM (stream, type) 
  22719.            Define this macro if the target machine requires special handling to 
  22720.            output an enumeration type.  The definition should be a C statement 
  22721.            (sans semicolon) to output the appropriate information to stream for 
  22722.            the type type. 
  22723.  
  22724.  DBX_OUTPUT_FUNCTION_END (stream, function) 
  22725.            Define this macro if the target machine requires special output at 
  22726.            the end of the debugging information for a function.  The definition 
  22727.            should be a C statement (sans semicolon) to output the appropriate 
  22728.            information to stream.  function is the FUNCTION_DECL node for the 
  22729.            function. 
  22730.  
  22731.  DBX_OUTPUT_STANDARD_TYPES (syms) 
  22732.            Define this macro if you need to control the order of output of the 
  22733.            standard data types at the beginning of compilation.  The argument 
  22734.            syms is a tree which is a chain of all the predefined global 
  22735.            symbols, including names of data types. 
  22736.  
  22737.            Normally, DBX output starts with definitions of the types for 
  22738.            integers and characters, followed by all the other predefined types 
  22739.            of the particular language in no particular order. 
  22740.  
  22741.            On some machines, it is necessary to output different particular 
  22742.            types first.  To do this, define DBX_OUTPUT_STANDARD_TYPES to output 
  22743.            those symbols in the necessary order.  Any predefined types that you 
  22744.            don't explicitly output will be output afterward in no particular 
  22745.            order. 
  22746.  
  22747.            Be careful not to define this macro so that it works only for C. 
  22748.            There are no global variables to access most of the built-in types, 
  22749.            because another language may have another set of types.  The way to 
  22750.            output a particular type is to look through syms to see if you can 
  22751.            find it. Here is an example: 
  22752.  
  22753.                       {
  22754.                         tree decl;
  22755.                         for (decl = syms; decl; decl = TREE_CHAIN (decl))
  22756.                           if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
  22757.                                        "long int"))
  22758.                             dbxout_symbol (decl);
  22759.                         ...
  22760.                       }
  22761.  
  22762.            This does nothing if the expected type does not exist. 
  22763.  
  22764.            See the function init_decl_processing in `c-decl.c' to find the 
  22765.            names to use for all the built-in C types. 
  22766.  
  22767.            Here is another way of finding a particular type: 
  22768.  
  22769.                       {
  22770.                         tree decl;
  22771.                         for (decl = syms; decl; decl = TREE_CHAIN (decl))
  22772.                           if (TREE_CODE (decl) == TYPE_DECL
  22773.                               && (TREE_CODE (TREE_TYPE (decl))
  22774.                                   == INTEGER_CST)
  22775.                               && TYPE_PRECISION (TREE_TYPE (decl)) == 16
  22776.                               && TYPE_UNSIGNED (TREE_TYPE (decl)))
  22777.                             /* This must be unsigned short.  */
  22778.                             dbxout_symbol (decl);
  22779.                         ...
  22780.                       }
  22781.  
  22782.  
  22783. ΓòÉΓòÉΓòÉ 21.17.4. File Names in DBX Format ΓòÉΓòÉΓòÉ
  22784.  
  22785. This describes file names in DBX format. 
  22786.  
  22787.  DBX_WORKING_DIRECTORY 
  22788.            Define this if DBX wants to have the current directory recorded in 
  22789.            each object file. 
  22790.  
  22791.            Note that the working directory is always recorded if GDB extensions 
  22792.            are enabled. 
  22793.  
  22794.  DBX_OUTPUT_MAIN_SOURCE_FILENAME (stream, name) 
  22795.            A C statement to output DBX debugging information to the stdio 
  22796.            stream stream which indicates that file name is the main source 
  22797.            file---the file specified as the input file for compilation. This 
  22798.            macro is called only once, at the beginning of compilation. 
  22799.  
  22800.            This macro need not be defined if the standard form of output for 
  22801.            DBX debugging information is appropriate. 
  22802.  
  22803.  DBX_OUTPUT_MAIN_SOURCE_DIRECTORY (stream, name) 
  22804.            A C statement to output DBX debugging information to the stdio 
  22805.            stream stream which indicates that the current directory during 
  22806.            compilation is named name. 
  22807.  
  22808.            This macro need not be defined if the standard form of output for 
  22809.            DBX debugging information is appropriate. 
  22810.  
  22811.  DBX_OUTPUT_MAIN_SOURCE_FILE_END (stream, name) 
  22812.            A C statement to output DBX debugging information at the end of 
  22813.            compilation of the main source file name. 
  22814.  
  22815.            If you don't define this macro, nothing special is output at the end 
  22816.            of compilation, which is correct for most machines. 
  22817.  
  22818.  DBX_OUTPUT_SOURCE_FILENAME (stream, name) 
  22819.            A C statement to output DBX debugging information to the stdio 
  22820.            stream stream which indicates that file name is the current source 
  22821.            file.  This output is generated each time input shifts to a 
  22822.            different source file as a result of `#include', the end of an 
  22823.            included file, or a `#line' command. 
  22824.  
  22825.            This macro need not be defined if the standard form of output for 
  22826.            DBX debugging information is appropriate. 
  22827.  
  22828.  
  22829. ΓòÉΓòÉΓòÉ 21.17.5. Macros for SDB and DWARF Output ΓòÉΓòÉΓòÉ
  22830.  
  22831. Here are macros for SDB and DWARF output. 
  22832.  
  22833.  SDB_DEBUGGING_INFO 
  22834.            Define this macro if GNU CC should produce COFF-style debugging 
  22835.            output for SDB in response to the `-g' option. 
  22836.  
  22837.  DWARF_DEBUGGING_INFO 
  22838.            Define this macro if GNU CC should produce dwarf format debugging 
  22839.            output in response to the `-g' option. 
  22840.  
  22841.  PUT_SDB_... 
  22842.            Define these macros to override the assembler syntax for the special 
  22843.            SDB assembler directives.  See `sdbout.c' for a list of these macros 
  22844.            and their arguments.  If the standard syntax is used, you need not 
  22845.            define them yourself. 
  22846.  
  22847.  SDB_DELIM 
  22848.            Some assemblers do not support a semicolon as a delimiter, even 
  22849.            between SDB assembler directives.  In that case, define this macro 
  22850.            to be the delimiter to use (usually `\n').  It is not necessary to 
  22851.            define a new set of PUT_SDB_op macros if this is the only change 
  22852.            required. 
  22853.  
  22854.  SDB_GENERATE_FAKE 
  22855.            Define this macro to override the usual method of constructing a 
  22856.            dummy name for anonymous structure and union types.  See `sdbout.c' 
  22857.            for more information. 
  22858.  
  22859.  SDB_ALLOW_UNKNOWN_REFERENCES 
  22860.            Define this macro to allow references to unknown structure, union, 
  22861.            or enumeration tags to be emitted.  Standard COFF does not allow 
  22862.            handling of unknown references, MIPS ECOFF has support for it. 
  22863.  
  22864.  SDB_ALLOW_FORWARD_REFERENCES 
  22865.            Define this macro to allow references to structure, union, or 
  22866.            enumeration tags that have not yet been seen to be handled.  Some 
  22867.            assemblers choke if forward tags are used, while some require it. 
  22868.  
  22869.  
  22870. ΓòÉΓòÉΓòÉ 21.18. Cross Compilation and Floating Point ΓòÉΓòÉΓòÉ
  22871.  
  22872. While all modern machines use 2's complement representation for integers, there 
  22873. are a variety of representations for floating point numbers.  This means that 
  22874. in a cross-compiler the representation of floating point numbers in the 
  22875. compiled program may be different from that used in the machine doing the 
  22876. compilation. 
  22877.  
  22878. Because different representation systems may offer different amounts of range 
  22879. and precision, the cross compiler cannot safely use the host machine's floating 
  22880. point arithmetic.  Therefore, floating point constants must be represented in 
  22881. the target machine's format.  This means that the cross compiler cannot use 
  22882. atof to parse a floating point constant; it must have its own special routine 
  22883. to use instead.  Also, constant folding must emulate the target machine's 
  22884. arithmetic (or must not be done at all). 
  22885.  
  22886. The macros in the following table should be defined only if you are cross 
  22887. compiling between different floating point formats. 
  22888.  
  22889. Otherwise, don't define them.  Then default definitions will be set up which 
  22890. use double as the data type, == to test for equality, etc. 
  22891.  
  22892. You don't need to worry about how many times you use an operand of any of these 
  22893. macros.  The compiler never uses operands which have side effects. 
  22894.  
  22895.  REAL_VALUE_TYPE 
  22896.            A macro for the C data type to be used to hold a floating point 
  22897.            value in the target machine's format.  Typically this would be a 
  22898.            struct containing an array of int. 
  22899.  
  22900.  REAL_VALUES_EQUAL (x, y) 
  22901.            A macro for a C expression which compares for equality the two 
  22902.            values, x and y, both of type REAL_VALUE_TYPE. 
  22903.  
  22904.  REAL_VALUES_LESS (x, y) 
  22905.            A macro for a C expression which tests whether x is less than y, 
  22906.            both values being of type REAL_VALUE_TYPE and interpreted as 
  22907.            floating point numbers in the target machine's representation. 
  22908.  
  22909.  REAL_VALUE_LDEXP (x, scale) 
  22910.            A macro for a C expression which performs the standard library 
  22911.            function ldexp, but using the target machine's floating point 
  22912.            representation.  Both x and the value of the expression have type 
  22913.            REAL_VALUE_TYPE.  The second argument, scale, is an integer. 
  22914.  
  22915.  REAL_VALUE_FIX (x) 
  22916.            A macro whose definition is a C expression to convert the 
  22917.            target-machine floating point value x to a signed integer.  x has 
  22918.            type REAL_VALUE_TYPE. 
  22919.  
  22920.  REAL_VALUE_UNSIGNED_FIX (x) 
  22921.            A macro whose definition is a C expression to convert the 
  22922.            target-machine floating point value x to an unsigned integer.  x has 
  22923.            type REAL_VALUE_TYPE. 
  22924.  
  22925.  REAL_VALUE_RNDZINT (x) 
  22926.            A macro whose definition is a C expression to round the 
  22927.            target-machine floating point value x towards zero to an integer 
  22928.            value (but still as a floating point number).  x has type 
  22929.            REAL_VALUE_TYPE, and so does the value. 
  22930.  
  22931.  REAL_VALUE_UNSIGNED_RNDZINT (x) 
  22932.            A macro whose definition is a C expression to round the 
  22933.            target-machine floating point value x towards zero to an unsigned 
  22934.            integer value (but still represented as a floating point number).  x 
  22935.            has type REAL_VALUE_TYPE, and so does the value. 
  22936.  
  22937.  REAL_VALUE_ATOF (string, mode) 
  22938.            A macro for a C expression which converts string, an expression of 
  22939.            type char *, into a floating point number in the target machine's 
  22940.            representation for mode mode.  The value has type REAL_VALUE_TYPE. 
  22941.  
  22942.  REAL_INFINITY 
  22943.            Define this macro if infinity is a possible floating point value, 
  22944.            and therefore division by 0 is legitimate. 
  22945.  
  22946.  REAL_VALUE_ISINF (x) 
  22947.            A macro for a C expression which determines whether x, a floating 
  22948.            point value, is infinity.  The value has type int. By default, this 
  22949.            is defined to call isinf. 
  22950.  
  22951.  REAL_VALUE_ISNAN (x) 
  22952.            A macro for a C expression which determines whether x, a floating 
  22953.            point value, is a ``nan'' (not-a-number).  The value has type int. 
  22954.            By default, this is defined to call isnan. 
  22955.  
  22956.  Define the following additional macros if you want to make floating point 
  22957.  constant folding work while cross compiling.  If you don't define them, cross 
  22958.  compilation is still possible, but constant folding will not happen for 
  22959.  floating point values. 
  22960.  
  22961.  REAL_ARITHMETIC (output, code, x, y) 
  22962.            A macro for a C statement which calculates an arithmetic operation 
  22963.            of the two floating point values x and y, both of type 
  22964.            REAL_VALUE_TYPE in the target machine's representation, to produce a 
  22965.            result of the same type and representation which is stored in output 
  22966.            (which will be a variable). 
  22967.  
  22968.            The operation to be performed is specified by code, a tree code 
  22969.            which will always be one of the following: PLUS_EXPR, MINUS_EXPR, 
  22970.            MULT_EXPR, RDIV_EXPR, MAX_EXPR, MIN_EXPR. 
  22971.  
  22972.            The expansion of this macro is responsible for checking for 
  22973.            overflow. If overflow happens, the macro expansion should execute 
  22974.            the statement return 0;, which indicates the inability to perform 
  22975.            the arithmetic operation requested. 
  22976.  
  22977.  REAL_VALUE_NEGATE (x) 
  22978.            A macro for a C expression which returns the negative of the 
  22979.            floating point value x.  Both x and the value of the expression have 
  22980.            type REAL_VALUE_TYPE and are in the target machine's floating point 
  22981.            representation. 
  22982.  
  22983.            There is no way for this macro to report overflow, since overflow 
  22984.            can't happen in the negation operation. 
  22985.  
  22986.  REAL_VALUE_TRUNCATE (mode, x) 
  22987.            A macro for a C expression which converts the floating point value x 
  22988.            to mode mode. 
  22989.  
  22990.            Both x and the value of the expression are in the target machine's 
  22991.            floating point representation and have type REAL_VALUE_TYPE. 
  22992.            However, the value should have an appropriate bit pattern to be 
  22993.            output properly as a floating constant whose precision accords with 
  22994.            mode mode. 
  22995.  
  22996.            There is no way for this macro to report overflow. 
  22997.  
  22998.  REAL_VALUE_TO_INT (low, high, x) 
  22999.            A macro for a C expression which converts a floating point value x 
  23000.            into a double-precision integer which is then stored into low and 
  23001.            high, two variables of type int. 
  23002.  
  23003.  REAL_VALUE_FROM_INT (x, low, high) 
  23004.            A macro for a C expression which converts a double-precision integer 
  23005.            found in low and high, two variables of type int, into a floating 
  23006.            point value which is then stored into x. 
  23007.  
  23008.  
  23009. ΓòÉΓòÉΓòÉ 21.19. Miscellaneous Parameters ΓòÉΓòÉΓòÉ
  23010.  
  23011. Here are several miscellaneous parameters. 
  23012.  
  23013.  PREDICATE_CODES 
  23014.            Define this if you have defined special-purpose predicates in the 
  23015.            file `machine.c'.  This macro is called within an initializer of an 
  23016.            array of structures.  The first field in the structure is the name 
  23017.            of a predicate and the second field is an array of rtl codes.  For 
  23018.            each predicate, list all rtl codes that can be in expressions 
  23019.            matched by the predicate.  The list should have a trailing comma. 
  23020.            Here is an example of two entries in the list for a typical RISC 
  23021.            machine: 
  23022.  
  23023.                       #define PREDICATE_CODES \
  23024.                         {"gen_reg_rtx_operand", {SUBREG, REG}},  \
  23025.                         {"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}},
  23026.  
  23027.            Defining this macro does not affect the generated code (however, 
  23028.            incorrect definitions that omit an rtl code that may be matched by 
  23029.            the predicate can cause the compiler to malfunction).  Instead, it 
  23030.            allows the table built by `genrecog' to be more compact and 
  23031.            efficient, thus speeding up the compiler.  The most important 
  23032.            predicates to include in the list specified by this macro are thoses 
  23033.            used in the most insn patterns. 
  23034.  
  23035.  CASE_VECTOR_MODE 
  23036.            An alias for a machine mode name.  This is the machine mode that 
  23037.            elements of a jump-table should have. 
  23038.  
  23039.  CASE_VECTOR_PC_RELATIVE 
  23040.            Define this macro if jump-tables should contain relative addresses. 
  23041.  
  23042.  CASE_DROPS_THROUGH 
  23043.            Define this if control falls through a case insn when the index 
  23044.            value is out of range.  This means the specified default-label is 
  23045.            actually ignored by the case insn proper. 
  23046.  
  23047.  CASE_VALUES_THRESHOLD 
  23048.            Define this to be the smallest number of different values for which 
  23049.            it is best to use a jump-table instead of a tree of conditional 
  23050.            branches. The default is four for machines with a casesi instruction 
  23051.            and five otherwise.  This is best for most machines. 
  23052.  
  23053.  WORD_REGISTER_OPERATIONS 
  23054.            Define this macro if operations between registers with integral mode 
  23055.            smaller than a word are always performed on the entire register. 
  23056.            Most RISC machines have this property and most CISC machines do not. 
  23057.  
  23058.  LOAD_EXTEND_OP (mode) 
  23059.            Define this macro to be a C expression indicating when insns that 
  23060.            read memory in mode, an integral mode narrower than a word, set the 
  23061.            bits outside of mode to be either the sign-extension or the 
  23062.            zero-extension of the data read.  Return SIGN_EXTEND for values of 
  23063.            mode for which the insn sign-extends, ZERO_EXTEND for which it 
  23064.            zero-extends, and NIL for other modes. 
  23065.  
  23066.            This macro is not called with mode non-integral or with a width 
  23067.            greater than or equal to BITS_PER_WORD, so you may return any value 
  23068.            in this case.  Do not define this macro if it would always return 
  23069.            NIL.  On machines where this macro is defined, you will normally 
  23070.            define it as the constant SIGN_EXTEND or ZERO_EXTEND. 
  23071.  
  23072.  IMPLICIT_FIX_EXPR 
  23073.            An alias for a tree code that should be used by default for 
  23074.            conversion of floating point values to fixed point.  Normally, 
  23075.            FIX_ROUND_EXPR is used. 
  23076.  
  23077.  FIXUNS_TRUNC_LIKE_FIX_TRUNC 
  23078.            Define this macro if the same instructions that convert a floating 
  23079.            point number to a signed fixed point number also convert validly to 
  23080.            an unsigned one. 
  23081.  
  23082.  EASY_DIV_EXPR 
  23083.            An alias for a tree code that is the easiest kind of division to 
  23084.            compile code for in the general case.  It may be TRUNC_DIV_EXPR, 
  23085.            FLOOR_DIV_EXPR, CEIL_DIV_EXPR or ROUND_DIV_EXPR.  These four 
  23086.            division operators differ in how they round the result to an 
  23087.            integer.  EASY_DIV_EXPR is used when it is permissible to use any of 
  23088.            those kinds of division and the choice should be made on the basis 
  23089.            of efficiency. 
  23090.  
  23091.  MOVE_MAX 
  23092.            The maximum number of bytes that a single instruction can move 
  23093.            quickly from memory to memory. 
  23094.  
  23095.  MAX_MOVE_MAX 
  23096.            The maximum number of bytes that a single instruction can move 
  23097.            quickly from memory to memory.  If this is undefined, the default is 
  23098.            MOVE_MAX.  Otherwise, it is the constant value that is the largest 
  23099.            value that MOVE_MAX can have at run-time. 
  23100.  
  23101.  SHIFT_COUNT_TRUNCATED 
  23102.            A C expression that is nonzero if on this machine the number of bits 
  23103.            actually used for the count of a shift operation is equal to the 
  23104.            number of bits needed to represent the size of the object being 
  23105.            shifted.  When this macro is non-zero, the compiler will assume that 
  23106.            it is safe to omit a sign-extend, zero-extend, and certain bitwise 
  23107.            `and' instructions that truncates the count of a shift operation. 
  23108.            On machines that have instructions that act on bitfields at variable 
  23109.            positions, which may include `bit test' instructions, a nonzero 
  23110.            SHIFT_COUNT_TRUNCATED also enables deletion of truncations of the 
  23111.            values that serve as arguments to bitfield instructions. 
  23112.  
  23113.            If both types of instructions truncate the count (for shifts) and 
  23114.            position (for bitfield operations), or if no variable-position 
  23115.            bitfield instructions exist, you should define this macro. 
  23116.  
  23117.            However, on some machines, such as the 80386 and the 680x0, 
  23118.            truncation only applies to shift operations and not the (real or 
  23119.            pretended) bitfield operations.  Define SHIFT_COUNT_TRUNCATED to be 
  23120.            zero on such machines.  Instead, add patterns to the `md' file that 
  23121.            include the implied truncation of the shift instructions. 
  23122.  
  23123.            You need not define this macro if it would always have the value of 
  23124.            zero. 
  23125.  
  23126.  TRULY_NOOP_TRUNCATION (outprec, inprec) 
  23127.            A C expression which is nonzero if on this machine it is safe to 
  23128.            ``convert'' an integer of inprec bits to one of outprec bits (where 
  23129.            outprec is smaller than inprec) by merely operating on it as if it 
  23130.            had only outprec bits. 
  23131.  
  23132.            On many machines, this expression can be 1. 
  23133.  
  23134.            When TRULY_NOOP_TRUNCATION returns 1 for a pair of sizes for modes 
  23135.            for which MODES_TIEABLE_P is 0, suboptimal code can result. If this 
  23136.            is the case, making TRULY_NOOP_TRUNCATION return 0 in such cases may 
  23137.            improve things. 
  23138.  
  23139.  STORE_FLAG_VALUE 
  23140.            A C expression describing the value returned by a comparison 
  23141.            operator with an integral mode and stored by a store-flag 
  23142.            instruction (`scond') when the condition is true.  This description 
  23143.            must apply to all the `scond' patterns and all the comparison 
  23144.            operators whose results have a MODE_INT mode. 
  23145.  
  23146.            A value of 1 or -1 means that the instruction implementing the 
  23147.            comparison operator returns exactly 1 or -1 when the comparison is 
  23148.            true and 0 when the comparison is false.  Otherwise, the value 
  23149.            indicates which bits of the result are guaranteed to be 1 when the 
  23150.            comparison is true.  This value is interpreted in the mode of the 
  23151.            comparison operation, which is given by the mode of the first 
  23152.            operand in the `scond' pattern.  Either the low bit or the sign bit 
  23153.            of STORE_FLAG_VALUE be on.  Presently, only those bits are used by 
  23154.            the compiler. 
  23155.  
  23156.            If STORE_FLAG_VALUE is neither 1 or -1, the compiler will generate 
  23157.            code that depends only on the specified bits.  It can also replace 
  23158.            comparison operators with equivalent operations if they cause the 
  23159.            required bits to be set, even if the remaining bits are undefined. 
  23160.            For example, on a machine whose comparison operators return an 
  23161.            SImode value and where STORE_FLAG_VALUE is defined as `0x80000000', 
  23162.            saying that just the sign bit is relevant, the expression 
  23163.  
  23164.                       (ne:SI (and:SI x (const_int power-of-2)) (const_int 0))
  23165.  
  23166.            can be converted to 
  23167.  
  23168.                       (ashift:SI x (const_int n))
  23169.  
  23170.            where n is the appropriate shift count to move the bit being tested 
  23171.            into the sign bit. 
  23172.  
  23173.            There is no way to describe a machine that always sets the low-order 
  23174.            bit for a true value, but does not guarantee the value of any other 
  23175.            bits, but we do not know of any machine that has such an 
  23176.            instruction.  If you are trying to port GNU CC to such a machine, 
  23177.            include an instruction to perform a logical-and of the result with 1 
  23178.            in the pattern for the comparison operators and let us know (see How 
  23179.            to Report Bugs). 
  23180.  
  23181.            Often, a machine will have multiple instructions that obtain a value 
  23182.            from a comparison (or the condition codes).  Here are rules to guide 
  23183.            the choice of value for STORE_FLAG_VALUE, and hence the instructions 
  23184.            to be used: 
  23185.  
  23186.                Use the shortest sequence that yields a valid definition for 
  23187.                 STORE_FLAG_VALUE.  It is more efficient for the compiler to 
  23188.                 ``normalize'' the value (convert it to, e.g., 1 or 0) than for 
  23189.                 the comparison operators to do so because there may be 
  23190.                 opportunities to combine the normalization with other 
  23191.                 operations. 
  23192.  
  23193.                For equal-length sequences, use a value of 1 or -1, with -1 
  23194.                 being slightly preferred on machines with expensive jumps and 1 
  23195.                 preferred on other machines. 
  23196.  
  23197.                As a second choice, choose a value of `0x80000001' if 
  23198.                 instructions exist that set both the sign and low-order bits 
  23199.                 but do not define the others. 
  23200.  
  23201.                Otherwise, use a value of `0x80000000'. 
  23202.  
  23203.            Many machines can produce both the value chosen for STORE_FLAG_VALUE 
  23204.            and its negation in the same number of instructions.  On those 
  23205.            machines, you should also define a pattern for those cases, e.g., 
  23206.            one matching 
  23207.  
  23208.                       (set A (neg:m (ne:m B C)))
  23209.  
  23210.            Some machines can also perform and or plus operations on condition 
  23211.            code values with less instructions than the corresponding `scond' 
  23212.            insn followed by and or plus.  On those machines, define the 
  23213.            appropriate patterns.  Use the names incscc and decscc, 
  23214.            respectively, for the the patterns which perform plus or minus 
  23215.            operations on condition code values.  See `rs6000.md' for some 
  23216.            examples.  The GNU Superoptizer can be used to find such instruction 
  23217.            sequences on other machines. 
  23218.  
  23219.            You need not define STORE_FLAG_VALUE if the machine has no 
  23220.            store-flag instructions. 
  23221.  
  23222.  FLOAT_STORE_FLAG_VALUE 
  23223.            A C expression that gives a non-zero floating point value that is 
  23224.            returned when comparison operators with floating-point results are 
  23225.            true. Define this macro on machine that have comparison operations 
  23226.            that return floating-point values.  If there are no such operations, 
  23227.            do not define this macro. 
  23228.  
  23229.  Pmode 
  23230.            An alias for the machine mode for pointers.  On most machines, 
  23231.            define this to be the integer mode corresponding to the width of a 
  23232.            hardware pointer; SImode on 32-bit machine or DImode on 64-bit 
  23233.            machines. On some machines you must define this to be one of the 
  23234.            partial integer modes, such as PSImode. 
  23235.  
  23236.            The width of Pmode must be at least as large as the value of 
  23237.            POINTER_SIZE.  If it is not equal, you must define the macro 
  23238.            POINTERS_EXTEND_UNSIGNED to specify how pointers are extended to 
  23239.            Pmode. 
  23240.  
  23241.  FUNCTION_MODE 
  23242.            An alias for the machine mode used for memory references to 
  23243.            functions being called, in call RTL expressions.  On most machines 
  23244.            this should be QImode. 
  23245.  
  23246.  INTEGRATE_THRESHOLD (decl) 
  23247.            A C expression for the maximum number of instructions above which 
  23248.            the function decl should not be inlined.  decl is a FUNCTION_DECL 
  23249.            node. 
  23250.  
  23251.            The default definition of this macro is 64 plus 8 times the number 
  23252.            of arguments that the function accepts.  Some people think a larger 
  23253.            threshold should be used on RISC machines. 
  23254.  
  23255.  SCCS_DIRECTIVE 
  23256.            Define this if the preprocessor should ignore #sccs directives and 
  23257.            print no error message. 
  23258.  
  23259.  NO_IMPLICIT_EXTERN_C 
  23260.            Define this macro if the system header files support C++ as well as 
  23261.            C. This macro inhibits the usual method of using system header files 
  23262.            in C++, which is to pretend that the file's contents are enclosed in 
  23263.            `extern "C" {...}'. 
  23264.  
  23265.  HANDLE_PRAGMA (stream) 
  23266.            Define this macro if you want to implement any pragmas.  If defined, 
  23267.            it should be a C statement to be executed when #pragma is seen.  The 
  23268.            argument stream is the stdio input stream from which the source text 
  23269.            can be read. 
  23270.  
  23271.            It is generally a bad idea to implement new uses of #pragma.  The 
  23272.            only reason to define this macro is for compatibility with other 
  23273.            compilers that do support #pragma for the sake of any user programs 
  23274.            which already use it. 
  23275.  
  23276.  VALID_MACHINE_DECL_ATTRIBUTE (decl, attributes, identifier, args) 
  23277.            If defined, a C expression whose value is nonzero if identifier with 
  23278.            arguments args is a valid machine specific attribute for decl. The 
  23279.            attributes in attributes have previously been assigned to decl. 
  23280.  
  23281.  VALID_MACHINE_TYPE_ATTRIBUTE (type, attributes, identifier, args) 
  23282.            If defined, a C expression whose value is nonzero if identifier with 
  23283.            arguments args is a valid machine specific attribute for type. The 
  23284.            attributes in attributes have previously been assigned to type. 
  23285.  
  23286.  COMP_TYPE_ATTRIBUTES (type1, type2) 
  23287.            If defined, a C expression whose value is zero if the attributes on 
  23288.            type1 and type2 are incompatible, one if they are compatible, and 
  23289.            two if they are nearly compatible (which causes a warning to be 
  23290.            generated). 
  23291.  
  23292.  SET_DEFAULT_TYPE_ATTRIBUTES (type) 
  23293.            If defined, a C statement that assigns default attributes to newly 
  23294.            defined type. 
  23295.  
  23296.  DOLLARS_IN_IDENTIFIERS 
  23297.            Define this macro to control use of the character `$' in identifier 
  23298.            names.  The value should be 0, 1, or 2.  0 means `$' is not allowed 
  23299.            by default; 1 means it is allowed by default if `-traditional' is 
  23300.            used; 2 means it is allowed by default provided `-ansi' is not used. 
  23301.            1 is the default; there is no need to define this macro in that 
  23302.            case. 
  23303.  
  23304.  NO_DOLLAR_IN_LABEL 
  23305.            Define this macro if the assembler does not accept the character `$' 
  23306.            in label names.  By default constructors and destructors in G++ have 
  23307.            `$' in the identifiers.  If this macro is defined, `.' is used 
  23308.            instead. 
  23309.  
  23310.  NO_DOT_IN_LABEL 
  23311.            Define this macro if the assembler does not accept the character `.' 
  23312.            in label names.  By default constructors and destructors in G++ have 
  23313.            names that use `.'.  If this macro is defined, these names are 
  23314.            rewritten to avoid `.'. 
  23315.  
  23316.  DEFAULT_MAIN_RETURN 
  23317.            Define this macro if the target system expects every program's main 
  23318.            function to return a standard ``success'' value by default (if no 
  23319.            other value is explicitly returned). 
  23320.  
  23321.            The definition should be a C statement (sans semicolon) to generate 
  23322.            the appropriate rtl instructions.  It is used only when compiling 
  23323.            the end of main. 
  23324.  
  23325.  HAVE_ATEXIT 
  23326.            Define this if the target system supports the function atexit from 
  23327.            the ANSI C standard.  If this is not defined, and 
  23328.            INIT_SECTION_ASM_OP is not defined, a default exit function will be 
  23329.            provided to support C++. 
  23330.  
  23331.  EXIT_BODY 
  23332.            Define this if your exit function needs to do something besides 
  23333.            calling an external function _cleanup before terminating with _exit. 
  23334.            The EXIT_BODY macro is only needed if netiher HAVE_ATEXIT nor 
  23335.            INIT_SECTION_ASM_OP are defined. 
  23336.  
  23337.  INSN_SETS_ARE_DELAYED (insn) 
  23338.            Define this macro as a C expression that is nonzero if it is safe 
  23339.            for the delay slot scheduler to place instructions in the delay slot 
  23340.            of insn, even if they appear to use a resource set or clobbered in 
  23341.            insn. insn is always a jump_insn or an insn; GNU CC knows that every 
  23342.            call_insn has this behavior.  On machines where some insn or 
  23343.            jump_insn is really a function call and hence has this behavior, you 
  23344.            should define this macro. 
  23345.  
  23346.            You need not define this macro if it would always return zero. 
  23347.  
  23348.  INSN_REFERENCES_ARE_DELAYED (insn) 
  23349.            Define this macro as a C expression that is nonzero if it is safe 
  23350.            for the delay slot scheduler to place instructions in the delay slot 
  23351.            of insn, even if they appear to set or clobber a resource referenced 
  23352.            in insn. insn is always a jump_insn or an insn.  On machines where 
  23353.            some insn or jump_insn is really a function call and its operands 
  23354.            are registers whose use is actually in the subroutine it calls, you 
  23355.            should define this macro.  Doing so allows the delay slot scheduler 
  23356.            to move instructions which copy arguments into the argument 
  23357.            registers into the delay slot of insn. 
  23358.  
  23359.            You need not define this macro if it would always return zero. 
  23360.  
  23361.  MACHINE_DEPENDENT_REORG (insn) 
  23362.            In rare cases, correct code generation requires extra machine 
  23363.            dependent processing between the second jump optimization pass and 
  23364.            delayed branch scheduling.  On those machines, define this macro as 
  23365.            a C statement to act on the code starting at insn. 
  23366.  
  23367.  
  23368. ΓòÉΓòÉΓòÉ 22. The Configuration File ΓòÉΓòÉΓòÉ
  23369.  
  23370. The configuration file `xm-machine.h' contains macro definitions that describe 
  23371. the machine and system on which the compiler is running, unlike the definitions 
  23372. in `machine.h', which describe the machine for which the compiler is producing 
  23373. output.  Most of the values in `xm-machine.h' are actually the same on all 
  23374. machines that GNU CC runs on, so large parts of all configuration files are 
  23375. identical.  But there are some macros that vary: 
  23376.  
  23377.  USG 
  23378.            Define this macro if the host system is System V. 
  23379.  
  23380.  VMS 
  23381.            Define this macro if the host system is VMS. 
  23382.  
  23383.  FATAL_EXIT_CODE 
  23384.            A C expression for the status code to be returned when the compiler 
  23385.            exits after serious errors. 
  23386.  
  23387.  SUCCESS_EXIT_CODE 
  23388.            A C expression for the status code to be returned when the compiler 
  23389.            exits without serious errors. 
  23390.  
  23391.  HOST_WORDS_BIG_ENDIAN 
  23392.            Defined if the host machine stores words of multi-word values in 
  23393.            big-endian order.  (GNU CC does not depend on the host byte ordering 
  23394.            within a word.) 
  23395.  
  23396.  HOST_FLOAT_WORDS_BIG_ENDIAN 
  23397.            Define this macro to be 1 if the host machine stores DFmode, XFmode 
  23398.            or TFmode floating point numbers in memory with the word containing 
  23399.            the sign bit at the lowest address; otherwise, define it to be zero. 
  23400.  
  23401.            This macro need not be defined if the ordering is the same as for 
  23402.            multi-word integers. 
  23403.  
  23404.  HOST_FLOAT_FORMAT 
  23405.            A numeric code distinguishing the floating point format for the host 
  23406.            machine.  See TARGET_FLOAT_FORMAT in Storage Layout for the 
  23407.            alternatives and default. 
  23408.  
  23409.  HOST_BITS_PER_CHAR 
  23410.            A C expression for the number of bits in char on the host machine. 
  23411.  
  23412.  HOST_BITS_PER_SHORT 
  23413.            A C expression for the number of bits in short on the host machine. 
  23414.  
  23415.  HOST_BITS_PER_INT 
  23416.            A C expression for the number of bits in int on the host machine. 
  23417.  
  23418.  HOST_BITS_PER_LONG 
  23419.            A C expression for the number of bits in long on the host machine. 
  23420.  
  23421.  ONLY_INT_FIELDS 
  23422.            Define this macro to indicate that the host compiler only supports 
  23423.            int bit fields, rather than other integral types, including enum, as 
  23424.            do most C compilers. 
  23425.  
  23426.  OBSTACK_CHUNK_SIZE 
  23427.            A C expression for the size of ordinary obstack chunks. If you don't 
  23428.            define this, a usually-reasonable default is used. 
  23429.  
  23430.  OBSTACK_CHUNK_ALLOC 
  23431.            The function used to allocate obstack chunks. If you don't define 
  23432.            this, xmalloc is used. 
  23433.  
  23434.  OBSTACK_CHUNK_FREE 
  23435.            The function used to free obstack chunks. If you don't define this, 
  23436.            free is used. 
  23437.  
  23438.  USE_C_ALLOCA 
  23439.            Define this macro to indicate that the compiler is running with the 
  23440.            alloca implemented in C.  This version of alloca can be found in the 
  23441.            file `alloca.c'; to use it, you must also alter the `Makefile' 
  23442.            variable ALLOCA.  (This is done automatically for the systems on 
  23443.            which we know it is needed.) 
  23444.  
  23445.            If you do define this macro, you should probably do it as follows: 
  23446.  
  23447.                       #ifndef __GNUC__
  23448.                       #define USE_C_ALLOCA
  23449.                       #else
  23450.                       #define alloca __builtin_alloca
  23451.                       #endif
  23452.  
  23453.            so that when the compiler is compiled with GNU CC it uses the more 
  23454.            efficient built-in alloca function. 
  23455.  
  23456.  FUNCTION_CONVERSION_BUG 
  23457.            Define this macro to indicate that the host compiler does not 
  23458.            properly handle converting a function value to a pointer-to-function 
  23459.            when it is used in an expression. 
  23460.  
  23461.  HAVE_VPRINTF 
  23462.            Define this if the library function vprintf is available on your 
  23463.            system. 
  23464.  
  23465.  MULTIBYTE_CHARS 
  23466.            Define this macro to enable support for multibyte characters in the 
  23467.            input to GNU CC.  This requires that the host system support the 
  23468.            ANSI C library functions for converting multibyte characters to wide 
  23469.            characters. 
  23470.  
  23471.  HAVE_PUTENV 
  23472.            Define this if the library function putenv is available on your 
  23473.            system. 
  23474.  
  23475.  POSIX 
  23476.            Define this if your system is POSIX.1 compliant. 
  23477.  
  23478.  NO_SYS_SIGLIST 
  23479.            Define this if your system does not provide the variable 
  23480.            sys_siglist. 
  23481.  
  23482.  DONT_DECLARE_SYS_SIGLIST 
  23483.            Define this if your system has the variable sys_siglist, and there 
  23484.            is already a declaration of it in the system header files. 
  23485.  
  23486.  USE_PROTOTYPES 
  23487.            Define this to be 1 if you know that the host compiler supports 
  23488.            prototypes, even if it doesn't define __STDC__, or define it to be 0 
  23489.            if you do not want any prototypes used in compiling GNU CC.  If 
  23490.            `USE_PROTOTYPES' is not defined, it will be determined automatically 
  23491.            whether your compiler supports prototypes by checking if `__STDC__' 
  23492.            is defined. 
  23493.  
  23494.  NO_MD_PROTOTYPES 
  23495.            Define this if you wish suppression of prototypes generated from the 
  23496.            machine description file, but to use other prototypes within GNU CC. 
  23497.            If `USE_PROTOTYPES' is defined to be 0, or the host compiler does 
  23498.            not support prototypes, this macro has no effect. 
  23499.  
  23500.  MD_CALL_PROTOTYPES 
  23501.            Define this if you wish to generate prototypes for the gen_call or 
  23502.            gen_call_value functions generated from the machine description 
  23503.            file.  If `USE_PROTOTYPES' is defined to be 0, or the host compiler 
  23504.            does not support prototypes, or `NO_MD_PROTOTYPES' is defined, this 
  23505.            macro has no effect.  As soon as all of the machine descriptions are 
  23506.            modified to have the appropriate number of arguments, this macro 
  23507.            will be removed. 
  23508.  
  23509.            Some systems do provide this variable, but with a different name 
  23510.            such as _sys_siglist.  On these systems, you can define sys_siglist 
  23511.            as a macro which expands into the name actually provided. 
  23512.  
  23513.  NO_STAB_H 
  23514.            Define this if your system does not have the include file `stab.h'. 
  23515.            If `USG' is defined, `NO_STAB_H' is assumed. 
  23516.  
  23517.  PATH_SEPARATOR 
  23518.            Define this macro to be a C character constant representing the 
  23519.            character used to separate components in paths.  The default value 
  23520.            is. the colon character 
  23521.  
  23522.  DIR_SEPARATOR 
  23523.            If your system uses some character other than slash to separate 
  23524.            directory names within a file specification, define this macro to be 
  23525.            a C character constant specifying that character.  When GNU CC 
  23526.            displays file names, the character you specify will be used.  GNU CC 
  23527.            will test for both slash and the character you specify when parsing 
  23528.            filenames. 
  23529.  
  23530.  OBJECT_SUFFIX 
  23531.            Define this macro to be a C string representing the suffix for 
  23532.            object files on your machine.  If you do not define this macro, GNU 
  23533.            CC will use `.o' as the suffix for object files. 
  23534.  
  23535.  EXECUTABLE_SUFFIX 
  23536.            Define this macro to be a C string representing the suffix for 
  23537.            executable files on your machine.  If you do not define this macro, 
  23538.            GNU CC will use the null string as the suffix for object files. 
  23539.  
  23540.  COLLECT_EXPORT_LIST 
  23541.            If defined, collect2 will scan the individual object files specified 
  23542.            on its command line and create an export list for the linker. Define 
  23543.            this macro for systems like AIX, where the linker discards object 
  23544.            files that are not referenced from main and uses export lists. 
  23545.  
  23546.  In addition, configuration files for system V define bcopy, bzero and bcmp as 
  23547.  aliases.  Some files define alloca as a macro when compiled with GNU CC, in 
  23548.  order to take advantage of the benefit of GNU CC's built-in alloca. 
  23549.  
  23550.  
  23551. ΓòÉΓòÉΓòÉ 23. Makefile Fragments ΓòÉΓòÉΓòÉ
  23552.  
  23553. When you configure GNU CC using the `configure' script (see Installation), it 
  23554. will construct the file `Makefile' from the template file `Makefile.in'.  When 
  23555. it does this, it will incorporate makefile fragment files from the `config' 
  23556. directory, named `t-target' and `x-host'.  If these files do not exist, it 
  23557. means nothing needs to be added for a given target or host. 
  23558.  
  23559.  Target Fragment                         Writing the t-target file. 
  23560.  Host Fragment                           Writing the x-host file. 
  23561.  
  23562.  
  23563. ΓòÉΓòÉΓòÉ 23.1. The Target Makefile Fragment ΓòÉΓòÉΓòÉ
  23564.  
  23565. The target makefile fragment, `t-target', defines special target dependent 
  23566. variables and targets used in the `Makefile': 
  23567.  
  23568.  LIBGCC1 
  23569.            The rule to use to build `libgcc1.a'. If your target does not need 
  23570.            to use the functions in `libgcc1.a', set this to empty. See 
  23571.            Interface. 
  23572.  
  23573.  CROSS_LIBGCC1 
  23574.            The rule to use to build `libgcc1.a' when building a cross compiler. 
  23575.            If your target does not need to use the functions in `libgcc1.a', 
  23576.            set this to empty.  See Cross Runtime. 
  23577.  
  23578.  LIBGCC2_CFLAGS 
  23579.            Compiler flags to use when compiling `libgcc2.c'. 
  23580.  
  23581.  LIB2FUNCS_EXTRA 
  23582.            A list of source file names to be compiled or assembled and inserted 
  23583.            into `libgcc.a'. 
  23584.  
  23585.  CRTSTUFF_T_CFLAGS 
  23586.            Special flags used when compiling `crtstuff.c'. See Initialization. 
  23587.  
  23588.  MULTILIB_OPTIONS 
  23589.            For some targets, invoking GNU CC in different ways produces objects 
  23590.            that can not be linked together.  For example, for some targets GNU 
  23591.            CC produces both big and little endian code.  For these targets, you 
  23592.            must arrange for multiple versions of `libgcc.a' to be compiled, one 
  23593.            for each set of incompatible options.  When GNU CC invokes the 
  23594.            linker, it arranges to link in the right version of `libgcc.a', 
  23595.            based on the command line options used. 
  23596.  
  23597.            The MULTILIB_OPTIONS macro lists the set of options for which 
  23598.            special versions of `libgcc.a' must be built.  Write options that 
  23599.            are mutually incompatible side by side, separated by a slash.  Write 
  23600.            options that may be used together separated by a space.  The build 
  23601.            procedure will build all combinations of compatible options. 
  23602.  
  23603.            For example, if you set MULTILIB_OPTIONS to `m68000/m68020 
  23604.            msoft-float', `Makefile' will build special versions of `libgcc.a' 
  23605.            using the options `-m68000', `-m68020', `-msoft-float', `-m68000 
  23606.            -msoft-float', and `-m68020 -msoft-float'. 
  23607.  
  23608.  MULTILIB_DIRNAMES 
  23609.            If MULTILIB_OPTIONS is used, this variable specifies the directory 
  23610.            names that should be used to hold the various libraries. Write one 
  23611.            element in MULTILIB_DIRNAMES for each element in MULTILIB_OPTIONS. 
  23612.            If MULTILIB_DIRNAMES is not used, the default value will be 
  23613.            MULTILIB_OPTIONS, with all slashes treated as spaces. 
  23614.  
  23615.            For example, if MULTILIB_OPTIONS is `m68000/m68020 msoft-float', 
  23616.            then the default value of MULTILIB_DIRNAMES is `m68000 m68020 
  23617.            msoft-float'.  You may specify a different value if you desire a 
  23618.            different set of directory names. 
  23619.  
  23620.  MULTILIB_MATCHES 
  23621.            Sometimes the same option may be written in two different ways.  If 
  23622.            an option is listed in MULTILIB_OPTIONS, GNU CC needs to know about 
  23623.            any synonyms.  In that case, set MULTILIB_MATCHES to a list of items 
  23624.            of the form `option=option' to describe all relevant synonyms.  For 
  23625.            example, `m68000=mc68000 m68020=mc68020'. 
  23626.  
  23627.  
  23628. ΓòÉΓòÉΓòÉ 23.2. The Host Makefile Fragment ΓòÉΓòÉΓòÉ
  23629.  
  23630. The host makefile fragment, `x-host', defines special host dependent variables 
  23631. and targets used in the `Makefile': 
  23632.  
  23633.  CC 
  23634.            The compiler to use when building the first stage. 
  23635.  
  23636.  CLIB 
  23637.            Additional host libraries to link with. 
  23638.  
  23639.  OLDCC 
  23640.            The compiler to use when building `libgcc1.a' for a native 
  23641.            compilation. 
  23642.  
  23643.  OLDAR 
  23644.            The version of ar to use when building `libgcc1.a' for a native 
  23645.            compilation. 
  23646.  
  23647.  INSTALL 
  23648.            The install program to use. 
  23649.  
  23650.  
  23651. ΓòÉΓòÉΓòÉ 24. Index ΓòÉΓòÉΓòÉ
  23652.  
  23653. Sorry, no cp index 
  23654.  
  23655.  
  23656. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  23657.  
  23658. Prior to release 2 of the compiler, there was a separate g++ compiler.  That 
  23659. version was based on GNU CC, but not integrated with it.  Versions of g++ with 
  23660. a `1.xx' version number---for example, g++ version 1.37 or 1.42---are much less 
  23661. reliable than the versions integrated with GCC 2.  Moreover, combining G++ 
  23662. `1.xx' with a version 2 GCC will simply not work.
  23663.  
  23664.  
  23665. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  23666.  
  23667. The analogous feature in Fortran is called an assigned goto, but that name 
  23668. seems inappropriate in C, where one can do more than simply store label 
  23669. addresses in label variables.
  23670.  
  23671.  
  23672. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  23673.  
  23674. See the file `bounds/CONTRIBUTORS' for a full list of the people who gave their 
  23675. effort for free to make all this possible.
  23676.  
  23677.  
  23678. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  23679.  
  23680. In a future version of bounds checking GCC, we will be able to unmap this 
  23681. memory. Thus the operating system will be able to reuse physical memory, 
  23682. whilest virtual memory addresses remain unused.
  23683.  
  23684.  
  23685. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  23686.  
  23687. A file's basename was the name stripped of all leading path information and of 
  23688. trailing suffixes, such as `.h' or `.C' or